SpringCloud系列(八)——SpringCloud集成Consul

Consul 的服务端:spring-cloud-consul-producer
  1. pom依赖

    
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        
    
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
    
  2. 配置文件application.properties(Consul 的地址和端口号默认是 localhost:8500 ,如果不是这个地址可以自行配置。 spring.cloud.consul.discovery.serviceName 是指注册到 Consul 的服务名称,后期客户端会根据这个名称来进行服务调用。)

    spring.application.name=spring-cloud-consul-producer
    server.port=8501
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    #注册到consul的服务名称
    spring.cloud.consul.discovery.serviceName=service-producer

  3. 启动类添加了 @EnableDiscoveryClient 注解表示支持服务发现

    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringCloudConsulProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsulProducerApplication.class, args);
    }
    

    }

  4. 创建一个 HelloController,提供 hello 的服务

    @RestController
    public class HelloController {
    @RequestMapping(“/hello”)
    public String hello() {
    return “hello consul”;
    }
    }

为了模拟注册均衡负载复制一份上面的项目重命名为 spring-cloud-consul-producer2 ,修改对应的端口为 8502,修改 hello 方法的返回值为:”hello consul 2”,修改完成后依次启动两个项目。

这里写图片描述

Consul 消费端:spring-cloud-consul-consumer
  1. 创建一个 spring-cloud-consul-consumer项目,pom 文件和上面示例保持一致。

  2. 配置文件(客户端可以设置注册到 Consul 中,也可以不注册到 Consul 注册中心中,根据我们的业务来选择,只需要在使用服务时通过 Consul 对外提供的接口获取服务信息即可。)

    spring.application.name=spring-cloud-consul-consumer
    server.port=8503
    spring.cloud.consul.host=127.0.0.1
    spring.cloud.consul.port=8500
    #设置不需要注册到 consul 中
    spring.cloud.consul.discovery.register=false

  3. 启动类

    @SpringBootApplication
    public class SpringCloudConsulConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsulConsumerApplication.class, args);
    }
    

    }

  4. 测试,创建一个 ServiceController ,试试如果去获取 Consul 中的服务。

    @RestController
    public class ServiceController {
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 获取所有服务
     */
    @RequestMapping("/services")
    public Object services() {
        return discoveryClient.getInstances("service-producer");
    }
    
    /**
     * 从所有服务中选择一个服务(轮询)
     */
    @RequestMapping("/discover")
    public Object discover() {
        return loadBalancerClient.choose("service-producer").getUri().toString();
    }
    

    }

  5. 第二种方法来模拟调用服务端提供的 hello 方法,创建 CallHelloController。

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

    @RequestMapping("/call")
    public String call(){
        ServiceInstance serviceInstance = loadBalancerClient.choose("service-producer");
        System.out.println("服务地址:" + serviceInstance.getUri());
        System.out.println("服务名称:" + serviceInstance.getServiceId());
    
        String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/hello", String.class);
        System.out.println(callServiceResult);
        return callServiceResult;
    }
    

    }

这里写图片描述

这里写图片描述

你可能感兴趣的:(java,spring,cloud,java-consul,consul,后端,缓存)