一、微服务的理解
将一个大的项目拆分为多个小服务,服务拆分的颗粒度应按照业务需求,例如模块的读写频率,耦合度等。将服务统一交由nacos管理,可对性能有要求的服务做集群部署。当然服务太多也会影响维护,后续还需要学习Docker容器、K8s容器编排技术、服务的链路跟踪等。来保证服务的可持续运行及维护。
二、服务发现与注册实例
##nacos的安装请参考管网文档:Nacos 快速开始
首先声明下我依赖的springboot及springCloud版本
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.11</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud的依赖配置-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
(一)服务提供方代码示例
添加需要依赖的jar包
<!-- 用于服务发现与注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
修改application.yml文件,增加nacos注册地址配置
spring:
cloud:
nacos:
discovery:
##nacos的地址
server-addr: 127.0.0.1:8848
##nacos的命名空间ID
namespace: d5afac56-78a0-48e5-ac76-c6e13c96f35f
application:
##应用名称,全局唯一,一个nacos中应用名不可重复
name: service_provider
springboot启动类添加注解:@EnableDiscoveryClient,实现服务发现
/**
* 启动程序
*
* @author 大蒜是只猫
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableDiscoveryClient
public class ContentApplication
{
public static void main(String[] args)
{
SpringApplication.run(ContentApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 启动成功 ლ(´ڡ`ლ)゙");
}
}
服务提供方提供的服务接口:
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
完成以上代码后,启动服务,可在nacos的服务管理--->服务列表菜单中看到该服务。
(二)服务消费方代码示例
添加依赖包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 用来做负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 提供了注解的方式调用服务,简化了http请求 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
修改application.yml文件
spring:
cloud:
nacos:
discovery:
##nacos的地址
server-addr: 127.0.0.1:8848
##nacos的命名空间ID
namespace: d5afac56-78a0-48e5-ac76-c6e13c96f35f
application:
##应用名称,全局唯一,一个nacos中应用名不可重复
name: consumer
消费端的服务启动类增加注解:@EnableFeignClients
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableDiscoveryClient
@EnableFeignClients
public class CAApplication
{
public static void main(String[] args)
{
SpringApplication.run(CAApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 消费端启动成功 ლ(´ڡ`ლ)゙");
}
}
通过feign调用服务端接口
@FeignClient("service_provider")//注解填写服务名称,即可实现服务接口的负载均衡调用
@Component //将该接口声明为spring组件,交由spring管理
public interface IContentClient {
//该地址为服务端提供的接口地址
@GetMapping("/content/echo/{string}")
public String echo(@PathVariable("string")String string);
}
编写一个controller类调用上面组件的接口
@RestController
@RequestMapping("/ca")
public class CAController {
@Autowired
private IContentClient contentClient;
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return contentClient.echo(str);
}
}
启动后访问:http://localhost:8080/ca/echo/2023,即可得到服务提供方接口的返回结果