Springcloud学习——结合RabbitMQ实现消息总线更新分布式配置

1Github项目地址 https://github.com/zengzhen1994/springboot-learning (选择Springcloud/Springcloud-learning-4)

2. 项目前提条件

2.1 RabbitMQ安装

如果没有安装的话,可以点击这里

2.2 Eureka服务器的搭建&两个Service用来向Eureka服务注册&一个config-server也向Eureka注册

如果还没搭建的话,可以点击这里

两个Service用不同的端口,在这里我用的是端口91,92。

Service向Eureka成功注册时,给每个Service添加Controller代码,用来测试是否获取到分布式配置以及配置是否更新。Controller代码如下

package com.zz.springcloud.controller;

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

@RefreshScope
@RestController
public class InfoController {

    @Value("${province}")
    private String province;

    @RequestMapping("/from")
    public String from() {
        return "Hi,I come from "+province;
    }



}

准备完成后,访问localhost:81/,如下图,应该有三个应用注册成功。


2.3 Google开发的postman下载,用来测试消息总线。

3. 本项目意义

在上一章中,我们能够从github成功获取配置信息。但是,当我们更改配置信息,再刷新访问页面时,发现页面并没有跟随更新。可以看到代码里有@RefreshScope,是为了给它发送/refresh请求时,该客户端才会刷新配置。如果有多个客户端时,显然不可能要每个客户端都去发送一个refresh请求。因此我们用RabbitMQ,它的工作机制就是绑定所有的客户端,以及配置服务端。当每次github上更改配置时,我们就通知配置服务端。服务端把消息发送给RabbitMQ,RabbitMQ再群发给绑定的所有客户端。这样的话我们就不用一个个去更新配置了。

4. 更改配置服务端&客户端代码

4.1 更改配置服务端

增加RabbitMQ依赖包

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bus-amqp</artifactId>
		</dependency>
在配置信息里添加RabbitMQ配置

#配置RabbitMQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
4.2 更改客户端代码

同样添加RabbitMQ依赖包,添加RabbitMQ配置在bootstrap.properties如下

spring.application.name=zz
server.port=92

eureka.client.serviceUrl.defaultZone=http://localhost:81/eureka/

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=eureka-config-server
spring.cloud.config.profile=info

spring.cloud.config.failFast=true

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
同样去获取zz-info.properties文件。



5. 效果演示

5.1 

首先修改配置信息,province=fujian

访问http://localhost:91/from 配置信息未更新

访问http://localhost:92/from 配置信息未更新
5.2

打开postman

发送post请求给config-server:http://localhost:90/bus/refresh

访问http://localhost:91/from 配置信息更新为fujian

访问http://localhost:92/from 配置信息更新为fujian




5.3

你可以继续更改配置,然后发送给你指定的service更新,例如

http://localhost:90/bus/refresh?destination=zz:91

destination后跟应用名:端口号。

如果是这样的post请求,则只有service1(端口号为91)的更新配置,另一个服务则不更新配置。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值