前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >09SpringCloud Bus消息总线

09SpringCloud Bus消息总线

作者头像
Remember_Ray
发布2020-11-04 10:04:47
5380
发布2020-11-04 10:04:47
举报
文章被收录于专栏:Ray学习笔记

RabbitMQ 安装过程

以 Ubuntu20 为例

参考文章

安装前准备

代码语言:javascript
复制
sudo apt-get update -y
sudo apt-get install curl gnupg -y

安装RabbitMQ签名密钥

代码语言:javascript
复制
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -

安装apt HTTPS传输

代码语言:javascript
复制
sudo apt-get install apt-transport-https

添加提供最新的RabbitMQ和Erlang版本的Bintray存储库

  1. 在/etc/apt/sources.list.d目录下创建bintray.erlang.list文件
  2. 在文件中输入以下内容(这里以Ubuntu20.04, Erlang版本为23.x为例子)
代码语言:javascript
复制
deb https://dl.bintray.com/rabbitmq-erlang/debian focal erlang-23.x

安装Erlang包

代码语言:javascript
复制
sudo apt-get update -y

sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

指定有效程序包

1、执行sudo apt-get update -y命令

2、 在/etc/apt/preferences.d目录下新建erlang文件并输入以下内容

代码语言:javascript
复制
Package: erlang*
Pin: release o=Bintray
Pin-Priority: 1000

3、 执行以下命令

代码语言:javascript
复制
sudo apt-cache policy

4、 在/etc/apt/preferences.d目录下的erlang文件中更改成以下内容(这里erlang选择23.0.3-1版本)

代码语言:javascript
复制
Package: erlang*
Pin: version 1:23.0.3-1
Pin-Priority: 1000

Package: esl-erlang
Pin: version 1:22.3.4.1
Pin-Priority: 1000

5、 在/etc/apt/preferences.d/目录下篡改剪rabbitmq文件,并添加以下内容

代码语言:javascript
复制
Package: rabbitmq-server
Pin: version 1:3.8.7
Pin-Priority: 1000

安装RabbitMQ

代码语言:javascript
复制
## Update package indices
sudo apt-get update -y

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

验证RabbitMQ安装

代码语言:javascript
复制
# 启动管理界面和外部监控系统
sudo rabbitmq-plugins enable rabbitmq_management

# 启动RabbitMQ
sudo service rabbitmq-server start

访问页面查看效果

访问地址:http://127.0.0.1:15672

User can only log in via localhost

添加账号并赋予权限

添加admin,并赋予administrator权限

添加admin用户,密码设置为admin。

代码语言:javascript
复制
sudo rabbitmqctl add_user  admin  admin

赋予权限

代码语言:javascript
复制
sudo rabbitmqctl set_user_tags admin administrator

赋予virtual host中所有资源的配置、写、读权限以便管理其中的资源

代码语言:javascript
复制
sudo rabbitmqctl  set_permissions -p / admin '.*' '.*' '.*'

访问服务器,使用 admin/admin 登陆

SpringCloud Bus动态刷新全局广播

设计思想

1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置

2、利用消息总线触发一个服务端ConfigServer的/bus/refresh断电,而刷新所有客户端的配置

这里我们选择第二种,更符合我们的要求,原因如下:

  1. 打破了微服务的职责单一性,因为微服务本身是业务模块,它不应该承担配置刷新的职责
  2. 破坏了微服务各节点的对等性
  3. 有一定的局限性,例如微服务在迁移时,它的网络地址常发生变化,如果想做到自动刷新,那就会增加更多的修改

cloud-config-client3366 复制并修改

演示广播效果,增加复杂度,再以3355为模板制作一个3366

controller

新增 serverPort 区分端口号

代码语言:javascript
复制
package com.ray.cloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description:
 * @Author Administrator
 * @Date 2020/10/18 15:35
 * @Version 1.0
 */
@RestController
@RequestMapping("/client")
@RefreshScope  // 具备刷新能力
public class ConfigClientController {

    @Value("${server.port}")
    private String serverPort;

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return "serverPort: " + serverPort + "\t\n\n" + "configInfo: " + configInfo;
    }
}

cloud-config-center3344配置中心服务端添加消息总线支持

pom

代码语言:javascript
复制
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

yml

代码语言:javascript
复制
server:
  port: 3344

spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          # Gitee上的git仓库名字
#          uri: https://gitee.com/qq343509740/spring-cloud_h_2020.git # 不公开
          uri: https://gitee.com/qq343509740/spring-cloud_-h_2020_config.git # 公开
          # 如果是不公开的项目,需要配置如下三项
#          force-pull: true
#          username: xxxx@qq.com
#          password: xxxx
          ##搜索目录.这个目录指的是Gitee上的目录
          search-paths:
#            - config-repo # 不公开
            - spring-cloud_-h_2020_config # 公开
      ##读取分支
      label: master
  # rabbitMQ 相关配置 (新增)
  rabbitmq:
    host: 192.168.116.128
    port: 5672
    username: admin
    password: admin


# 服务注册到 eureka 地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/


# rabbitMQ 相关配置,暴露 bus 刷新配置的端点 (新增)
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

cloud-config-center3355客户端添加消息总线支持

pom

代码语言:javascript
复制
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

yml

代码语言:javascript
复制
server:
  port: 3355

spring:
  application:
    name: cloud-config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
      uri: http://localhost:3344

  # rabbitMQ 相关配置
  rabbitmq:
    host: 192.168.116.128
    port: 5672
    username: admin
    password: admin

# 服务注册到 eureka 地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

cloud-config-center3366客户端添加消息总线支持

pom

代码语言:javascript
复制
<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

yml

代码语言:javascript
复制
server:
  port: 3366

spring:
  application:
    name: cloud-config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
      uri: http://localhost:3344

  # rabbitMQ 相关配置
  rabbitmq:
    host: 192.168.116.128
    port: 5672
    username: admin
    password: admin

# 服务注册到 eureka 地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

测试1

访问:http://localhost:7001/

访问:http://config3344.com:3344/master/config-dev.yml

访问:http://localhost:3355/client/configInfo

访问:http://localhost:3366/client/configInfo

目前所有服务正常,尝试改变Gitee上面的配置文件

测试2

目的:一处修改,处处生效

此时,主要输入下面命令,即可达到目的

代码语言:javascript
复制
curl -X POST "http://localhost:3344/actuator/bus-refresh"

不用重启项目或者刷新指定端口即可处处刷新

SpringCloud Bus动态刷新定点通知

不想全部通知,只想定点通知。指定具体某一个实例生效而不是全部。 公式:http://localhost:配置中心的端口号/actuator/bus-refresh/{destination} /bus/refresh请求不再发送具体的服务实例上,而是发给config server并通过destination参数类指定需要更新配置的服务或实例

测试

只通知3355,不 通知3366

代码语言:javascript
复制
## config-client:3355 相当于 服务名称:端口号
curl -X POST "http://localhost:3344/actuator/bus-refresh/cloud-config-client:3355"

刷新 3355,已经发生改变

刷新 3366,没有发生改变

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-18|,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ 安装过程
    • 安装前准备
      • 安装RabbitMQ签名密钥
        • 安装apt HTTPS传输
          • 添加提供最新的RabbitMQ和Erlang版本的Bintray存储库
            • 安装Erlang包
              • 指定有效程序包
                • 安装RabbitMQ
                  • 验证RabbitMQ安装
                    • 访问页面查看效果
                      • 添加账号并赋予权限
                      • SpringCloud Bus动态刷新全局广播
                        • 设计思想
                          • cloud-config-client3366 复制并修改
                            • controller
                          • cloud-config-center3344配置中心服务端添加消息总线支持
                            • pom
                            • yml
                          • cloud-config-center3355客户端添加消息总线支持
                            • pom
                            • yml
                          • cloud-config-center3366客户端添加消息总线支持
                            • pom
                            • yml
                          • 测试1
                            • 测试2
                            • SpringCloud Bus动态刷新定点通知
                              • 测试
                              相关产品与服务
                              微服务引擎 TSE
                              微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档