上一篇介绍了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);
}
创建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接口
多刷新几次列表数据,查看控制台日志,确认是轮流调用
至此,我们便完成了一个包含分布式配置、服务调用组件的简单微服务入门项目。