一,为什么要搭建consul的client?

1,网上的很多资料,访问consul时用的单机模式,这样是不可以直接在生产环境中使用的

还有一些资料,搭建了consul的集群后,直接访问集群中的某一个ip,

这样不能达到高可用的目的,因为如果当前访问的ip宕机,则到整个consul集群的访问会失效.

2,如何访问consul集群?

第一个方法:一个是集成java代码,直接在配置文件中的host写上集群的多个ip,

当访问的地址有异常则访问其他的ip,

大家可以参考这个项目:

https://segmentfault.com/a/1190000020155983

第二个方法:较常用的方法:

在项目所在机器上以client模式安装运行一个consul的agent,

java代码通过client访问consul的server集群

因为服务提供者会多个实例,所以如果某个实例上的consul client发生故障,

只会有一个服务提供者失败,而不会影响到其他的实例继续提供服务

3,安装consul集群:参见:

https://www.cnblogs.com/architectforest/p/13735545.html

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,在linux centos8上搭建consul的client

1,创建consul的安装目录
  并移动consul文件到安装目录
[root@localhost consul]# mkdir /usr/local/soft/consul
[root@localhost consul]# mv ./consul /usr/local/soft/consul/
2,以client形式启动agent
[root@localhost consul]# nohup /usr/local/soft/consul/consul agent -data-dir=/data/consul/data -node=client-1 -bind=192.168.1.7 -datacenter=dc1 -ui -client=0.0.0.0 -join=172.17.0.2 > /dev/null 2>&1 &
查看集群的成员:
[root@localhost consul]# /usr/local/soft/consul/consul members
Node Address Status Type Build Protocol DC Segment
server-2 172.17.0.2:8301 alive server 1.8.4 2 dc1 <all>
server-3 172.17.0.3:8301 alive server 1.8.4 2 dc1 <all>
server-4 172.17.0.4:8301 alive server 1.8.4 2 dc1 <all>
client-1 192.168.1.7:8301 alive client 1.8.4 2 dc1 <default>

可以看到client-1是以client类型加入到集群中的

 
3,通过web形式查看:
consul的服务有3个实例,没变化:
 
查看node,可以看到加入的client:

三,演示项目的相关信息

1,项目所在地址

https://github.com/liuhongdi/cloudconsul

2,功能说明:

演示了获取consul集群中的service和实例信息

3,项目结构:如图:

四,配置文件说明

1,pom.xml

        <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> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2,application.properties

spring.application.name=provider1
server.port=8080
#consul
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#service name
spring.cloud.consul.discovery.service-name=lhdprovider
provider.name = p1

五, java代码说明

1,DemoApplication.java

@EnableDiscoveryClient
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

2,HomeController.java

@RestController
@RequestMapping("/home")
public class HomeController { @Resource
private DiscoveryClient discoveryClient; @Value("${provider.name}")
private String name; @Value("${server.port}")
private String port; // list services
@GetMapping("/serviceslist")
public Object serviceslist() {
return discoveryClient.getServices();
} // list instances in a service id
@GetMapping("/instanceslist")
public Object instanceslist() {
return discoveryClient.getInstances("consul");
} //test api
@GetMapping("/hello")
public String hello() {
//return discoveryClient.getInstances("consul");
String res = "name:"+name+";port:"+port;
return res;
}
}

六,测试效果

1,得到服务列表:访问:

http://127.0.0.1:8080/home/serviceslist

返回

2,得到consul server集群的实例列表

http://127.0.0.1:8080/home/instanceslist

返回:

3,从web ui查看服务列表

查看lhdprovider中的实例:

七,查看spring boot的版本

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.4.RELEASE)

最新文章

  1. Asp.Net WebApi核心对象解析(上篇)
  2. Circuit Breaker Pattern(断路器模式)
  3. ajax提交请求返回对象异常问题
  4. JAVA StringBuilder StringBuffer String比较
  5. iOS no visible @interface for &#39;UIButton&#39; declares the selector errors
  6. 浅谈ajax的优点与缺点
  7. ng-clip angualr 的copy功能
  8. 可变字符串类 StringBuilder
  9. 「学习笔记」min_25筛
  10. 咸鱼入门到放弃7--jsp&lt;二&gt;jsp常用标签
  11. TCP/IP协议示意图
  12. 二、易语言 api 相关
  13. [转帖]浅谈程序中的text段、data段和bss段
  14. CentOS7单独安装Apache Bench压力测试工具
  15. 上下文无关的GMM-HMM声学模型
  16. Tomcat开启JMX监控 visualvm
  17. AE导出mov
  18. android入门 — 多线程(一)
  19. Decoding VOX Files in C# (Converting VOX Files to WAV Files)
  20. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(5):责任链模式、观察者模式

热门文章

  1. 基于abp的小小设备控制系统设计
  2. JVM_02 类加载子系统
  3. JDK8在windows系统下安装
  4. vue 项目中实时请求接口 建立长连接
  5. web自动化(python)——selenium工具基本使用
  6. 垃圾回收器(GC)
  7. Java Web学习(八)RESTful设计
  8. 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
  9. [HarekazeCTF2019]Avatar Uploader 1 &amp;&amp;
  10. phpStudy8.1.0.1配置子域名多网站