目录
2、创建生产者服务 springcloudalibaba-producer
3、创建消费者服务 springcloudalibaba-consumer
一 分布式注册中心Nacos原理
1、生产者启动的时候将服务地址注册到注册中心Nacos,其中Key=服务名称,Value=Ip地址+端口号;
2、注册中心存放服务地址的列表,其中key是唯一的为服务名称,列表为List集合;
3、消费者从注册中心根据服务名称获取服务地址的列表;
4、消费者获取服务地址列表后根据某种负载均衡算法获取某一地址进行Rpc远程调用;
二 SpringCloudAlibaba整合Nacos
1、导入Pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2、创建生产者服务 springcloudalibaba-producer
2.1 配置文件
server:
port: 8081
spring:
application:
name: springcloudalibaba-producer
cloud:
nacos:
discovery:
###服务注册地址
server-addr: ip地址:8848
2.2 示例代码
@RestController
public class ProducerController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/getPort")
public String getPort(){
return "端口号为:"+serverPort;
}
}
3、创建消费者服务 springcloudalibaba-consumer
3.1 配置文件
server:
port: 8082
spring:
application:
name: springcloudalibaba-consumer
cloud:
nacos:
discovery:
###服务注册地址
server-addr:ip地址:8848
3.2 示例代码
@RestController
public class ConsumerController {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumerToProducer")
public String consumerToProducer(){
//从注册中心上获取该注册服务列表
//List<ServiceInstance> list = discoveryClient.getInstances("springcloudalibaba-producer");
//ServiceInstance serviceInstance = list.get(0);
ServiceInstance serviceInstance = loadBalancerClient.choose("springcloudalibaba-producer");
URI uri = serviceInstance.getUri();
//使用本地rest形式实现rpc调用
String result = restTemplate.getForObject(uri + "/getPort", String.class);
return result;
}
}
三 测试访问
1、启动服务后访问 IP地址:8848/nacos
如上图为Nacos的可视化界面,可知服务被注册到注册中心;
2、通过浏览器访问 IP地址:8082 /consumerToProducer
由上可知,实现了服务之间的远程调用;