Consul 实现服务提供者和服务消费者

使用Consul为服务注册中心, 实现服务提供者和服务消费者。

Consul服务提供者

添加依赖



    org.springframework.cloud
    spring-cloud-starter-consul-discovery




    org.springframework.boot
    spring-boot-starter-actuator

        

    org.springframework.boot
    spring-boot-starter-web

添加配置

spring.application.name=consul-provider
server.port=8504
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.serviceName=service-provider
provider.name=p1

开启服务注册功能

在启动类中添加注解@EnableDiscoveryClient. 开启服务注册

服务接口

@RestController
public class HelloController {
    @Value("${provider.name}")
    private String name;

    @Value("${server.port}")
    private String port;

    @RequestMapping("/hello")
    public String hello() {
        return "provider:" + name + " port: " + port;
    }
}

配置服务提供者集群

接下来添加配置文件application-consul-provider.properties,添加Consul的地址和端口号。

添加配置

spring.application.name=consul-provider
server.port=8505
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.serviceName=service-provider
provider.name=p2

启动服务提供者集群

打包服务提供者,然后打包jar 后分别以consul-provider1、consul-provider2的配置参数启动服务提供者

java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider1
java -jar consulprovider-0.0.1-SNAPSHOT.jar --spring.profiles.active=consul-provider2

运行后在Consul控制中心有两个服务提供者,ID分别是consul-provider-8504,consul-provider-8505.
访问http://localhost:8504/hello,网页显示:provider:p1 port:8504
访问http://localhost:8505/hello,网页显示:provider:p2 port:8505

Consul 服务消费者

添加依赖



        org.springframework.cloud
    spring-cloud-starter-consul-discovery

        

    org.springframework.boot
    spring-boot-starter-web

添加配置

spring.application.name=consul-consumer
server.port=8506
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.register=false

编写服务接口调用

@RestController
public class HelloController {
   @Autowired
   private LoadBalancerClient loadBalancerClient;

    @GetMapping("/hello")
    public String hello() {
        ServiceInstance serviceInstance = loadBalancerClient.choose("service-provider");
        URI uri = serviceInstance.getUri();
        String callService = new RestTemplate().getForObject(uri + "/hello", String.class);
        System.out.println(callService);
        return callService;
    }
}

测试

多次访问http://localhost:8506/hello。网页交替出现provider:p1 port:8504 , provider:p2 port:8505,通过RestTemplate实现了客户端负载均衡。

你可能感兴趣的:(Consul 实现服务提供者和服务消费者)