前言
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
五大组件选择:
1、 服务注册中心Nacos;
2、 服务负载均衡Openfeign;
3、 服务熔断降级sentinel;
4、 服务网关组件Gateway;
5、 统一配置中心组件Nacos;
一、安装nacos
下载: nacos-server-2.0.4.tar.gz
解压:tar -zxvf nacos-server-2.0.4.tar.gz
启动:进入解压出来的 nacos/bin/ 目录,执行 ./startup.sh -m standalone
访问:访问8848默认端口,http://172.16.10.159:8848/nacos
输入用户名密码 nacos/nacos
二、服务提供者
1、引入依赖
springboot版本使用较低一些的 2.4.13,
spring-cloud-dependencies 版本使用 2020.0.5,
nacos-discovery 版本使用 2021.1
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.13</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.5</version>
<type>pom</type>
<!-- <scope>runtime</scope>-->
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、配置文件
#指定端口
server.port=9000
#指定服务名称
spring.application.name=server
#指定nacas地址
spring.cloud.nacos.discovery.server-addr=172.16.10.159:8848
3、创建服务接口
@RestController
@RequestMapping("/server")
public class ServerController {
@GetMapping("/test/{id}")
public Object test(@PathVariable String id) {
Map map = new HashMap();
map.put("server", id);
return map;
}
}
三、服务消费者
1、引入依赖
在服务提供者依赖的基础上,加入 openfeign 和 loadbalancer 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.13</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.5</version>
<type>pom</type>
<!-- <scope>runtime</scope>-->
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
2、配置文件
#指定端口
server.port=9001
#指定服务名称
spring.application.name=client
#指定nacas地址
spring.cloud.nacos.discovery.server-addr=172.16.10.159:8848
3、启动类
加上注解@EnableFeignClients
@SpringBootApplication
@EnableFeignClients
public class CloudApplication {
public static void main(String[] args) {
SpringApplication.run(CloudApplication.class, args);
System.out.println("started...");
}
}
4、创建服务api接口
用@FeignClient 注解标识,value = “server” 表示要访问的服务提供者的名称是server
@FeignClient(value = "server")
@Component
public interface ServerApi {
@GetMapping("/server/test/{id}")
Map test(@PathVariable String id);
}
5、客户端接口
@RestController
@RequestMapping("/client")
public class ClientController {
@Autowired
private ServerApi serverApi;
@GetMapping("/test/{id}")
public Map test(@PathVariable String id){
return serverApi.test(id);
}
}
四、测试
1、查看nacos
启动服务提供者和服务消费者,查看服务注册
2、访问服务消费者接口
访问:
http://192.168.100.73:9001/client/test/100
结果:
{
"server": "100"
}