这讲内容我们会演示基于nacos的服务消费方去访问服务的提供方,同时还会加入负载均衡的方式去访问
服务提供方
- 1-nacos-provider9001
- 2-nacos-provider9002
分别将这两个服务器实例启动,我们查看nacos实例发现会有两个服务实列
服务消费方
1、创建 3-nacos-consumer8001,项目的依赖 spring-cloud-starter-alibaba-nacos-discovery
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>alibaba</artifactId> <groupId>com.liuyangjava</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.liuyangjava</groupId> <artifactId>3-nacos-consumer8001</artifactId> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> </project>
2、创建 application.yml
server: port: 8001 spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 application: name: nacos-consumer management: endpoints: web: exposure: include: '*' service-url: nacos-provider: http://nacos-provider
- service-url.nacos-provider:通过配置文件,设置服务提供者的地址,等待消费者接口调用
- spring.application.name:设置消费者的应用程序的名称
3、创建NacosConsumer8001主启动类
package com.liuyangjava; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosConsumer8001 { public static void main(String[] args) { SpringApplication.run(NacosConsumer8001.class, args); } }
4、创建配置类,主要完成消费方的负载均衡的访问配置
- @Configuration:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
- @Bean:它是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名
- @LoadBalanced:在使用 RestTemplate 的时候,如果 RestTemplate 上面有这个注解,那么这个 RestTemplate 调用的远程地址,会走负载均衡器
package com.liuyangjava.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
5、创建 NacosConsumerController,通过此负载均衡方式去调用服务提供者接口
package com.liuyangjava.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @RestController public class NacosConsumerController { @Value("${service-url.nacos-provider}") private String serverUrl; @Resource private RestTemplate restTemplate; @GetMapping("/nacos/consumer") public String getInfo() { return restTemplate.getForObject(serverUrl + "/nacos/provider", String.class); } }