cxl
Published on 2025-08-11 / 12 Visits
0
0

Solon Cloud小试牛刀

上一篇介绍了Solon Cloud这一轻量级微服务框架,并与当前Java领域的微服务霸主SpringCloud进行了一番比对,在当前信创风潮下,Solon Cloud还是拿下了部分市场。所谓技多不压身,经过了一轮对solon的了解之后,现在开始做个简单的微服务入门吧!

分布式配置

分布式配置是微服务架构的核心基础设施,通过动态性、集中化和高可用等特性,显著提升系统的灵活性、可维护性和可靠性。这里引入Nacos中间件做为配置中心与服务注册中心。

Docker部署Nacos

  docker run --name cxl-nacos-standalone -e MODE=standalone \
  -e NACOS_AUTH_TOKEN=Y2hlbnhpYW5saW5jaGVueGlhbmxpbmNoZW54aWFubGlu \
  -e NACOS_AUTH_IDENTITY_KEY=chenxianlin -e NACOS_AUTH_IDENTITY_VALUE=chenxianlin \
  -p 9090:8080 -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:latest

docker会下载最新的nacos版本,目前是3.0.2,支持MCP服务,部署成功后可通过 http://localhost:9090 访问,首次登录可设置密码,我这里设置跟用户名nacos一样

新建配置

现在我们在nacos默认命名空间(public)中新建一个配置文件,将我们在上一篇中关于Solon框架初步实践里的Mysql配置抽取到配置文件中。

引入nacos依赖包

  <!-- 虽然nacos已经更新到第3版,但是solon集成的nacos2-solon-cloud-plugin目前一样适用 -->
  <dependency>
    <groupId>org.noear</groupId>
    <artifactId>nacos2-solon-cloud-plugin</artifactId>
  </dependency>

加入配置

在原先的ap.yml中加入关于nacos配置,对,就是只需4行代码这么简单

  # 原先配置
  solon.app:
    name: 'solon-demo'
    group: 'demo'

  server.port: 8081

  # 新加配置
  solon.cloud.nacos:
    server: localhost:8848   # nacos服务地址
    config:
      load: "db-dev.yml"     # 加载的配置文件

启动服务并验证

服务注册与调用

服务注册是微服务架构的基石,通过动态管理、解耦通信、负载均衡等机制,显著提升了系统的弹性、可维护性和扩展性。实际应用中需根据业务需求选择合适工具(如Eureka适合Spring Cloud生态,Consul适合多数据中心场景),并配合健康检查、安全认证等机制保障稳定性。

上一步中我们已经实现了分布式配置,并将服务注册到了服务中心,还访问了/person接口并成功返回了数据,现在我们以此项目为提供者,再新建一个项目心消费者的角色通过服务中心调用它。

生成项目

使用项目生成器快速生成项目,已经更新到3.4.3了,说明Solon社区还是很活跃的

引入nacos依赖包

  <dependency>
      <groupId>org.noear</groupId>
      <artifactId>nacos2-solon-cloud-plugin</artifactId>
  </dependency>

  <!--使用 NamiClient 实现远程服务调用-->
  <dependency>
      <groupId>org.noear</groupId>
      <artifactId>nami-coder-snack3</artifactId>
  </dependency>
  <dependency>
      <groupId>org.noear</groupId>
      <artifactId>nami-channel-http</artifactId>
  </dependency>

加入配置

  solon.app:
  name: 'solon-cloud-demo'
  group: 'demo'

  server.port: 8080

  # 新加配置
  solon.cloud.nacos:
    server: localhost:8848   # nacos服务地址

创建Service调用服务

  package com.chenxianlin.cloud.service;

  import com.chenxianlin.cloud.domain.BO.Person;
  import org.noear.nami.annotation.NamiBody;
  import org.noear.nami.annotation.NamiClient;
  import org.noear.nami.annotation.NamiMapping;
  import java.util.List;

  @NamiClient(name = "solon-demo")
  public interface IPersonService {
  
      @NamiMapping("GET") // 或 @NamiMapping("GET /person")
      List<Person> person();
  
      @NamiMapping("POST") // 或 @NamiMapping("POST /person")
      Long person(@NamiBody Person person);
  }

image-BNFe.png

创建Controller

  @Mapping("/person")
  @Controller
  public class PersonController {
  
      @NamiClient
      private IPersonService personService;
  
      @Get
      @Mapping("list")
      public List<Person> person() {
          return personService.person();
      }
  
      @Post
      @Mapping("save")
      public Long save(@Body Person person) {
          return personService.person(person);
      }
  
  }

启动服务并验证

为了测试调用服务时使用的是负载均衡策略,这里提供者solon-demo服务启用两个实例,端口分别是 8081、8082

启动solon-cloud-demo后访问其API接口多刷新几次列表数据,查看控制台日志,确认是轮流调用

至此,我们便完成了一个包含分布式配置、服务调用组件的简单微服务入门项目。


Comment