什么是SpringCloudBus?如何使用SpringCloudBus实现自动更新配置功能?

这里是修真院后端小课堂,每篇分享文从

【什么是SpringCloudBus?如何使用SpringCloudBus实现自动更新配置功能? 】

大家好,我是IT修真院郑州分院第11期的学员何爽,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网java(职业)任务10,深度思考中的知识点——什么是SpringCloudBus?如何使用SpringCloudBus实现自动更新配置功能?

1.背景介绍

一、简介

在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来,

由于该主题中产生的消息会被所有实例监听和消费,所以我们称它为消息总线。Spring Cloud Bus就像一个分布式执行器,

用于扩展的Spring Boot应用程序,但也可以用作应用程序之间的通信通道。那么这里就涉及到了消息代理,目前流行的消息代理中间件有不少,

Spring Cloud Bus支持RabbitMQ和Kafka,本文我们主要来看看RabbitMQ的基本使用。

二、消息代理

消息代理(Message Broker)是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖的作用,

使得应用程序可以高效地解耦通信过程。消息代理是一个中间件产品,它的核心是一个消息的路由程序,用来实现接收和分发消息,

并根据设定好的消息处理流来转发给正确的应用。

它包括独立的通信和消息传递协议,能够实现组织内部和组织间的网络通信

设计代理的目的就是为了能够从应用程序中传入消息,并执行一些特别的操作,下面这些是在企业应用中,我们经常需要使用消息代理的场景:

将消息路由到一个或多个目的地。

消息转化为其他的表现方式。

执行消息的聚集、消息的分解,并将结果发送到它们的目的地,然后重新组合响应返回给消息用户。

调用Web服务来检索数据。

响应事件或错误。

使用发布-订阅模式来提供内容或基千主题的消息路由。

2.知识剖析

RabbitMQ的基础知识和使用方法

1、简介

MQ(Message Queue)消息队列,用于应用系统解耦、消息异步分发。 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。其优点如下:

      1)Reliability-可靠性高。

2)Flexible Routing-路由灵活。

3)Clustering-支持集群。

4)Federation-支持互联。

5)Tracing-便于追踪。

2、安装

RabbitMQ是用Erlang语言编写的,因此安装RabbitMQ之前我们要先安装Erlang环境,首先去http://www.erlang.org/downloads地址下载erlang,

下载到的是一个exe文件,直接双击安装即可,然后去http://www.rabbitmq.com/downl…地址下载RabbitMQ,下载成功之后,也是一个exe,双击安装即可

RabbitMQ安装成功之后,默认会创建系统服务,将和Windows系统一起启动。所以安装成功之后,打开系统服务,我们如果看到如下结果表示安装成功了:

安装成功之后,我们可以使用web来管理我们的RabbitMQ,管理之前需要我们先开启web管理功能,开启方式:进入到安装目录的sbin目录下,

然后执行 .rabbitmq-plugins enable rabbitmq_management命令,如下:

执行成功之后,打开浏览器,输入http://localhost:15672进入到web管理页面,需要先登录,默认用户名密码都是guest,页面如下:

进入里面之后我们可以新建一个用户,用户的级别分别为:management、none、policymaker、monitoring和administrator,不同取值所对应的权限区别如下:

none:不能访问 management plugin

management:用户可以通过AMQP做的任何事外加:

1.列出自己可以通过AMQP登入的virtual hosts

2.查看自己的virtual hosts中的queues, exchanges 和 bindings

3.查看和关闭自己的channels 和 connections

4.查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动

policymaker:management可以做的任何事外加:查看、创建和删除自己的virtual hosts所属的policies和parameters

monitoring:management可以做的任何事外加:

1.列出所有virtual hosts,包括他们不能登录的virtual hosts

2.查看其他用户的connections和channels

3.查看节点级别的数据如clustering和memory使用情况

4.查看真正的关于所有virtual hosts的全局的统计信息

administrator:policymaker和monitoring可以做的任何事外加:

1.创建和删除virtual hosts

2.查看、创建和删除users

3.查看创建和删除permissions

4.关闭其他用户的connections

这里我创建一个root用户,创建好之后,给用户设置virtual hosts,否则一会使用这个用户的时候会报错。设置如下:

OK,配置完成后,接下来我们来看一个Spring Boot和RabbitMQ整合的案例,来对RabbitMQ做进一步的了解,具体的见编码实战。

3.常见问题

什么时候用cloud bus

4.解决方案

spring cloud bus在整个后端服务中起到联通的作用,联通后端的多台服务器。我们为什么需要他做联通呢?

后端服务器一般都做了集群化,很多台服务器,而且在大促活动期经常发生服务的扩容、缩容、上线、下线。这样,后端服务器的数量、IP就会变来变去,如果我们想进行一些线上的管理和维护工作,就需要维护服务器的IP。

比如我们需要更新配置、比如我们需要同时失效所有服务器上的某个缓存,都需要向所有的相关服务器发送命令,也就是调用一个接口。

你可能会说,我们一般会采用zookeeper的方式,统一存储服务器的ip地址,需要的时候,向对应服务器发送命令。这是一个方案,但是他的解耦性、灵活性、实时性相比消息总线都差那么一点。

总的来说,就是在我们需要把一个操作散发到所有后端相关服务器的时候,就可以选择使用cloud bus了。

5.编码实战

6.扩展思考

利用Spring Cloud Bus做配置更新:

这时Spring Cloud Bus做配置更新步骤如下:

1、提交代码触发post请求给bus/refresh

2、server端接收到请求并发送给Spring Cloud Bus

3、Spring Cloud bus接到消息并通知给其它客户端

4、其它客户端接收到通知,请求Server端获取最新配置

5、全部客户端均获取到最新的配置

具体的实现过程和步骤可参考下面的网址:

https://www.cnblogs.com/ityouknow/p/6931958.html

7.参考文献

https://www.cnblogs.com/ityouknow/p/6931958.html

https://www.jb51.net/article/137875.htm

https://segmentfault.com/a/1190000011827203

8.更多讨论

Q1:提问人wyq:

Eureka开启自我保护的提示

A1:回答人(h):

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

Q2:提问人:zhh

Eureka注册服务慢的问题如何解决?

A2:回答人(h):

eureka.instance.leaseRenewalIntervalInSeconds

参考文档:

http://cloud.spring.io/spring-cloud-static/Camden.SR1/#_why_is_it_so_slow_to_register_a_service

Q3:提问人:zyq

如何解决Eureka Server不踢出已关停的节点的问题?

A3:回答人(h):

server端:

eureka.server.enable-self-preservation (设为false,关闭自我保护主要)

eureka.server.eviction-interval-timer-in-ms 清理间隔(单位毫秒,默认是60*1000)

client端:

eureka.client.healthcheck.enabled = true 开启健康检查(需要spring-boot-starter-actuator依赖)

eureka.instance.lease-renewal-interval-in-seconds =10 租期更新时间间隔(默认30秒)

eureka.instance.lease-expiration-duration-in-seconds =30 租期到期时间(默认90秒)

9.鸣谢

此教程是自我查找资料的基础上完善而成。

10.结束语

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值