在上一篇中我们将客户端服务注册进了nacos,现在我们将消费端注册进nacos,同时让消费端能够成功访问。
- 在上一篇的父级项目中创建一个module。
其pom文件为:<dependencies> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <dependency> <groupId>org.example</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--日常通用jar包配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
配置文件为:
server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) service-url: nacos-user-service: http://nacos-payment-provider
主启动类:
@EnableDiscoveryClient @SpringBootApplication public class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class,args); } }
创建一个测试类:
@RestController @Slf4j public class OrderNacosController { @Resource private RestTemplate restTemplate; //也可以将这个地址写在类中 @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); } }
启动此项目,如果在nacos中能够查看到说明注册成功。
-
访问客户端
在浏览器输入http://localhost:83//consumer/payment/nacos/1,如果出现如下信息说明访问客户端的代码成功。 -
实现负载均衡
按照上一篇的代码重新复制一份,然后将端口改成9002并启动,此时查看我们的nacos会发现客户端有两个实例
在消费端也就是新建一个ApplicationContextConfig,@LoadBalanced注解会让restTemplate调用接口时走负载均衡。@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
重新启动项目并访问接口会发现打印出来的端口分别为9001和9002,说明负载均衡生效。