一,为什么要搭建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)

spring cloud:通过client访问consul集群(spring cloud hoxton sr8 / spring boot 2.3.4)的更多相关文章

  1. kubernetes实战之部署一个接近生产环境的consul集群

    系列目录 前面我们介绍了如何在windows单机以及如何基于docker部署consul集群,看起来也不是很复杂,然而如果想要把consul部署到kubernetes集群中并充分利用kubernete ...

  2. 实战中的asp.net core结合Consul集群&Docker实现服务治理

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在 ...

  3. .net core结合Consul集群&Docker实现服务治理

    实战中的asp.net core结合Consul集群&Docker实现服务治理 https://www.cnblogs.com/guolianyu/p/9614050.html 0.目录 整体 ...

  4. spring cloud:搭建基于consul的服务提供者集群(spring cloud hoxton sr8 / spring boot 2.3.4)

    一,搭建基于consul的服务提供者集群 1,consul集群,共3个实例: 2, 服务提供者集群:共2个实例: 3,服务消费者:一个实例即可 4,consul集群的搭建,请参考: https://w ...

  5. Consul集群Server+Client模式

    Consul集群Server+Client模式 架构示意图 只使用Consul的Server模式有以下2个问题: 因为Consul Server数量受到控制所以压力承载(扩展性)是个问题. Serve ...

  6. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...

  7. Consul集群Server模式

    Consul集群Server模式 架构示意图 Consul在生产环境下运行模式分为两种:Server模式和Client模式(dev模式属于开发模式不在这里讨论),我们先用Server模式搭建一个Con ...

  8. 分布式架构学习-Consul集群配置

    简介 之前公司用的是Consul进行服务发现以及服务管理,自己一直以来只是用一下,但是没有具体的深入,觉得学习不可以这样,所以稍微研究了一下. 网上有很多关于Consul的介绍和对比,我这里也不献丑了 ...

  9. Consul集群版容器化部署与应用集成

    背景 由于公司目前的主要产品使用的注册中心是consul,consul需要用集群来保证高可用,传统的方式(Nginx/HAProxy)会有单点故障问题,为了解决该问题,我开始研究如何只依赖consul ...

随机推荐

  1. Solr专题(三)SSM项目整合Solr

    一.环境配置 所需要的jar包: org.apache.solr.solr-solrj maven依赖: <!-- https://mvnrepository.com/artifact/org. ...

  2. 老男孩教育python全栈第22期Day15笔记

    day15 今日内容大纲 昨日内容回顾作业讲解 装饰器:完美的呈现了开放封闭原则.装饰器的本质:闭包. def wraper(f): def inner(*args, **kwargs): " ...

  3. pytest(1):安装与使用

    pytest介绍 1.pytest是比较成熟的一款python测试框架 2.简单灵活,容易上手,对比unitest框架更丰富. 3.单元测试和复杂的功能测试,都支持. 4.同时支持selenium,a ...

  4. Java基础之HashMap原理分析(put、get、resize)

    在分析HashMap之前,先看下图,理解一下HashMap的结构 我手画了一个图,简单描述一下HashMap的结构,数组+链表构成一个HashMap,当我们调用put方法的时候增加一个新的 key-v ...

  5. 《Offer一箩筐》2W字总结面试套路14问——不给例子的教程都是耍流氓!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  6. Eclipse安装AmaterasUML插件问题

    为了画UML图,我想在Eclipse(版本Version: Oxygen Release (4.7.0))安装AmaterasUML,第一步,安装GEF - http://download.eclip ...

  7. RDS、DDS 和 GaussDB 理不清?看这一篇足够了!

    当前,华为云提供的数据库服务主要包括三大类:关系型数据库服务,非关系型数据库服务以及数据库工具服务.如下图所示: 关系型数据库和非关系型数据库均可分为开源和自研两大类.其中,自研数据库统一为Gauss ...

  8. Ubuntu修改时区和更新时间

    先查看当前系统时间 root@ubuntu:/# date -R 结果时区是:-0500 我需要的是东八区,这儿显示不是,所以需要设置一个时区 1.运行tzselect root@ubuntu:/# ...

  9. Java集合-07Map接口及其抽象类

    简介 前面把List基本记录完了,对于集合List,Map,Set,因为Set基于Map,故先记录Map. 这一篇主要记录Map接口及其抽象类(java version:1.8) 整体架构 参考上图, ...

  10. logging模块培训小结

    Python自动化课程又上了一节课,每一个自动化框架都涉及到日志的使用,logging模块是Python的一个标准库模块,由标准库模块提供日志记录API的关键好处是所有Python模块都可以使用这个日 ...