服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringCloud Bus组件的使用配置详解

SpringCloud Bus组件的使用配置详解

2022-09-14 14:58Arog Java教程

bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通过广播形式通知所有客户端刷新配置信息,避免手动重启服务的工作,这篇文章主要介绍了SpringCloud Bus组件的使用,需要的朋友可以参考下

什么是Bus

0.解释

  • https://spring.io/projects/spring-cloud-bus
  • springcloudbus使用轻量级消息代理将分布式系统的节点连接起来。然后,可以使用它来广播状态更改(例如配置更改)或其他管理指令。AMQP和Kafka broker实现包含在项目中。或者,在类路径上找到的任何springcloudstream绑定器都可以作为传输使用。
  • 通俗定义: bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通过广播形式通知所有客户端刷新配置信息,避免手动重启服务的工作

实现配置刷新原理

SpringCloud Bus组件的使用配置详解

 

搭建RabbitMQ服务

0.下载rabbitmq安装包 [可以直接使用docker安装更方便] 官方安装包下载:https://www.rabbitmq.com/install-rpm.html#downloads
[注意:][这里安装包只能用于centos7.x系统]

SpringCloud Bus组件的使用配置详解

1.将rabbitmq安装包上传到linux系统中

erlang-22.0.7-1.el7.x86_64.rpm
rabbitmq-server-3.7.18-1.el7.noarch.rpm

2.安装Erlang依赖包

rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm

3.安装RabbitMQ安装包(需要联网)

yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
	注意:默认安装完成后配置文件模板在:/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example目录中,需要将配置文件复制到/etc/rabbitmq/目录中,并修改名称为rabbitmq.config

4.复制配置文件

cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

5.查看配置文件位置

ls /etc/rabbitmq/rabbitmq.config

6.修改配置文件(参见下图:)

vim /etc/rabbitmq/rabbitmq.config 

SpringCloud Bus组件的使用配置详解

将上图中配置文件中红色部分去掉%%,以及最后的,逗号 修改为下图:

SpringCloud Bus组件的使用配置详解

7.执行如下命令,启动rabbitmq中的插件管理

rabbitmq-plugins enable rabbitmq_management

出现如下说明:
	Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch

set 3 plugins.
Offline change; changes will take effect at broker restart.

8.启动RabbitMQ的服务

systemctl start rabbitmq-server
systemctl restart rabbitmq-server
systemctl stop rabbitmq-server

9.查看服务状态(见下图:)

systemctl status rabbitmq-server

● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2019-09-25 22:26:35 CST; 7s ago
Main PID: 2904 (beam.smp)
Status: “Initialized”
CGroup: /system.slice/rabbitmq-server.service
├─2904 /usr/lib64/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -
MBlmbcs…
├─3220 erl_child_setup 32768
├─3243 inet_gethost 4
└─3244 inet_gethost 4

SpringCloud Bus组件的使用配置详解

10.关闭防火墙服务

systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
systemctl stop firewalld   

11.访问web管理界面

http://10.15.0.8:15672/

SpringCloud Bus组件的使用配置详解

12.登录管理界面

username:  guest
password:  guest
![](https://img-blog.csdnimg.cn/8e49b6d997cd47ef8e79128841f08321.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQXJvZw==,size_20,color_FFFFFF,t_70,g_se,x_16)

13.MQ服务搭建成功

 

实现自动配置刷新

1.在所有项目中引入bus依赖

<!--引入bus依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2.配置统一配置中心连接到mq

spring.rabbitmq.host=localhost											#连接主机
spring.rabbitmq.port=5672														#连接mq端口
spring.rabbitmq.username=user												#连接mq用户名
spring.rabbitmq.password=password										#连接mq密码

3.远端配置中加入连接mq配置

SpringCloud Bus组件的使用配置详解

4.启动统一配置中心服务 正常启动

SpringCloud Bus组件的使用配置详解

5.启动客户端服务 加入bus组件之后客户端启动报错原因springcloud中默认链接不到远程服务器不会报错,但是在使用bus消息总线时必须开启连接远程服务失败报错

SpringCloud Bus组件的使用配置详解

spring.cloud.config.fail-fast=true

SpringCloud Bus组件的使用配置详解

6.修改远程配置后在配置中心服务通过执行post接口刷新配置 curl -X POST http://localhost:7878/actuator/bus-refresh

SpringCloud Bus组件的使用配置详解

7.通过上述配置就实现了配置统一刷新

 

指定服务刷新配置

1.说明

  • 默认情况下使用curl -X POST http://localhost:7878/actuator/bus-refresh这种方式刷新配置是全部广播形式,也就是所有的微服务都能接收到刷新配置通知,但有时我们修改的仅仅是某个服务的配置,这个时候对于其他服务的通知是多余的,因此就需要指定服务进行通知

2.指定服务刷新配置实现

  • 指定端口刷新某个具体服务: curl -X POST http://localhost:7878/actuator/bus-refresh/configclient:9090
  • 指定服务id刷新服务集群节点: curl -X POST http://localhost:7878/actuator/bus-refresh/configclient

[注意:][configclient代表刷新服务的唯一标识]

 

集成webhook实现自动刷新

1.配置webhooks

  • 添加webhooks
  • 在webhooks中添加刷新配置接口

SpringCloud Bus组件的使用配置详解

内网穿透可以使用natapp进行穿透,本地一个穿透免费穿透,https://natapp.cn/ 步骤非常简单。然后将穿透的地址放入到所需地址栏即可。

SpringCloud Bus组件的使用配置详解

2.解决400错误问题

  • 在配置中心服务端加入过滤器进行解决(springcloud中一个坑)
@Component
public class UrlFilter  implements Filter {
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {

  }
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      HttpServletRequest httpServletRequest = (HttpServletRequest)request;
      HttpServletResponse httpServletResponse = (HttpServletResponse)response;
      String url = new String(httpServletRequest.getRequestURI());
      //只过滤/actuator/bus-refresh请求
      if (!url.endsWith("/bus-refresh")) {
          chain.doFilter(request, response);
          return;
      }
      //获取原始的body
      String body = readAsChars(httpServletRequest);
      System.out.println("original body:   "+ body);
      //使用HttpServletRequest包装原始请求达到修改post请求中body内容的目的
      CustometRequestWrapper requestWrapper = new CustometRequestWrapper(httpServletRequest);
      chain.doFilter(requestWrapper, response);
  public void destroy() {
  private class CustometRequestWrapper extends HttpServletRequestWrapper {
      public CustometRequestWrapper(HttpServletRequest request) {
          super(request);
      @Override
      public ServletInputStream getInputStream() throws IOException {
          byte[] bytes = new byte[0];
          ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
          return new ServletInputStream() {
              @Override
              public boolean isFinished() {
                  return byteArrayInputStream.read() == -1 ? true:false;
              }
              public boolean isReady() {
                  return false;
              public void setReadListener(ReadListener readListener) {
              public int read() throws IOException {
                  return byteArrayInputStream.read();
          };
  public static String readAsChars(HttpServletRequest request)
  {
      BufferedReader br = null;
      StringBuilder sb = new StringBuilder("");
      try
      {
          br = request.getReader();
          String str;
          while ((str = br.readLine()) != null)
          {
              sb.append(str);
          }
          br.close();
      catch (IOException e)
          e.printStackTrace();
      finally
          if (null != br)
              try
              {
                  br.close();
              catch (IOException e)
                  e.printStackTrace();
      return sb.toString();
}

SpringCloud Bus组件的使用配置详解

到此这篇关于SpringCloud Bus组件的使用的文章就介绍到这了,更多相关SpringCloud Bus组件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_32230309/article/details/123381467

延伸 · 阅读

精彩推荐
  • Java教程java中i=i++和j=i++的区别小结

    java中i=i++和j=i++的区别小结

    这篇文章主要给大家介绍了关于java中i=i++和j=i++区别的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    姑娘加油6572021-09-03
  • Java教程java使用集合实现通讯录功能

    java使用集合实现通讯录功能

    这篇文章主要为大家详细介绍了java使用集合实现通讯录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    chen4497575205362021-04-06
  • Java教程Java连接数据库JDBC技术之prepareStatement的详细介绍

    Java连接数据库JDBC技术之prepareStatement的详细介绍

    这篇文章主要介绍了Java连接数据库JDBC技术之prepareStatement的详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    nnzhuilian4842020-07-18
  • Java教程Java Web开发入门书籍实例解析(总结一)

    Java Web开发入门书籍实例解析(总结一)

    从事Java Web开发这一段时间来,对Java 面向对象的思想和MVC开发模式可以说已经熟悉了。我当前参与的项目使用的框架是Spring、SpringMVC、Hibernate。下面脚本之...

    孤傲苍狼2832020-04-08
  • Java教程WIN10环境 Maven的安装与配置详细教程

    WIN10环境 Maven的安装与配置详细教程

    这篇文章主要介绍了WIN10环境 Maven的安装与配置详细教程,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    南方有乔木2552020-09-06
  • Java教程mybatis开启spring事务代码解析

    mybatis开启spring事务代码解析

    这篇文章主要介绍了mybatis开启spring事务代码解析,具有一定参考价值,需要的朋友可以了解下。...

    IT老蒋9722021-02-28
  • Java教程Java中sleep()与wait()的区别总结

    Java中sleep()与wait()的区别总结

    因为最近学习时正好碰到这两个方法,就查阅相关资料,并通过程序实现,进行区别总结一下,所以下面这篇文章主要给大家总结介绍了关于Java中sleep()与...

    Hongten5912020-09-29
  • Java教程详解Java高阶语法Volatile

    详解Java高阶语法Volatile

    这篇文章主要介绍了Java高阶语法Volatile,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...

    涛姐涛哥5872021-07-24