码迷,mamicode.com
首页 > 其他好文 > 详细

Consul 的注册与消费

时间:2020-07-26 23:22:41      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:bean   auto   实现   for   区分   name   autowire   host   disco   

Consul 的单节点注册

首先我们来创建一个服务提供者,就是一个普通的 Spring Boot 项目,添加如下依赖:

技术图片

项目创建好后,添加如下配置:

# 给服务起个别名
spring.application.name=consul-provider 
server.port=2000
# Consul 相关配置
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-provider

在项目启动类上开启服务发现的功能:

@SpringBootApplication
@EnableDiscoveryClient  // 开启服务发现的功能
public class ConsulProviderApplication {

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

}

最后添加一个测试接口:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

启动项目,访问 Consul 后台管理页面 http://localhost:8500 ,看到如下信息,表示 Consul 已经注册成功了:

技术图片

Consul 集群注册

为了区分集群中是哪一个 provider 提供的服务,我们修改一下 Consul 中的接口:

@RestController
public class HelloController {
    @Value("${server.port}")
    Integer port;

    @GetMapping("/hello")
    public String hello(){
        return "hello>>"+ port;
    }
}

修改完成后,对项目进行打包。打包成功后,命令行执行如下命令,启动两个 provider 实例:

java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2001
java -jar consul-provider-0.0.1-SNAPSHOT.jar --server.port=2000

启动成功后,再去 Consul 的后台管理页面,如下图:

技术图片

这样就实现了 Consul 的集群注册。

Consul 的消费

首先创建一个消费实例,创建方式和 consul-provider 一致.

创建完后,添加如下配置:

spring.application.name=consul-consumer
server.port=2002
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=consul-consumer

开启服务发现, 并添加 RestTemplate:

@SpringBootApplication
@EnableDiscoveryClient
public class ConsulConsumerApplication {

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

    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

最会,提供一个服务调用的方法:

@RestController
public class HelloController {
    @Autowired
    LoadBalancerClient loadBalancerClient;
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello(){
        ServiceInstance choose = loadBalancerClient.choose("consul-provider");
        System.out.println("服务地址:"+ choose.getUri());
        System.out.println("服务名称:"+ choose.getServiceId());
        String s = restTemplate.getForObject(choose.getUri() + "/hello", String.class);
        System.out.println(s);
        return "hello";
    }
}

启动项目,打开 localhost:8500 ,即可看到 consul-consumer 已经注册到 Consul 中了:

技术图片

浏览器输入 http://localhost:2002/hello, 如下图:

技术图片

每天学习一点点,每天进步一点点。

Consul 的注册与消费

标签:bean   auto   实现   for   区分   name   autowire   host   disco   

原文地址:https://www.cnblogs.com/youcoding/p/13379148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!