SpringCloud 入门教程(十):和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus

在本教程第三讲Spring Cloud 入门教程(三): 配置自动刷新中,通过POST方式向客户端发送/refresh请求, 可以让客户端获取到配置的最新变化。但试想一下, 在分布式系统中,如果存在很多个客户端都需要刷新改配置,通过这种方式去刷新也是一种非常痛苦的事情。那有没有什么办法让系统自动完成呢? 之前我们提到用githook或者jenkins等外部工具来触发。现在说另外一种思路, 如果refresh命令可以发送给config server,然后config server自动通知所有config client, 那么就可以大大简化配置刷新工作。这样,虽然仍然需要通过refresh命令触发, 但通过webhook等钩子方式, 我们只需要将关联的命令挂到配置中心上,而不需要每个配置客户端都去关联。

现在,我们通过整合消息队列Rabbitmq来完成这件事。我们的目标是, 当git仓库中的配置一旦更改,将refresh命令发送给配置中心,然后配置中心通过消息队列,自动通知所有使用了该配置的刷新各自配置。

Spring Cloud Netflix Bus是Spring Cloud的消息机制,当Git Repository 改变时,通过POST请求Config Server的/bus/refresh,Config Server 会从repository获取最新的信息并通过amqp传递给client,如图所示.

1. RabbitMQ的安装和配置的过程,这里就不赘述了。

2. 以第三节的程序为基础, config Server和config client两个项目中均添加一些内容, 在pom.xml中增加

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-actuator</artifactId>  
</dependency>
<dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-bus-amqp</artifactId>  
</dependency>

 

2. 在配置文件bootstrap.yml(config client里面是application.yml)中增加关于RabbitMQ的连接和用户信息:

spring:rabbitmq:host: localhostport: 5672username: springcloudpassword: 123456

 

3. 以上配置高好后,配置刷新,就只需要向config server发送 /bus/refresh的POST请求就可以了. 

4. 如果用poster等发送POST请求是出现错误:“Full authentication is required to access this resource.", 那么可以在yml配置文件中加入以下内容禁止Config server的权限拦截。

management:security:enabled: false  #忽略权限拦截

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置背景图时防止图片拉伸的解决方法

在设置背景图时&#xff0c;如果图片不够大会被拉伸&#xff0c;使图片失真&#xff0c;如果图片太大会对view控件的显示造成影响。如果只是在ImageView中设置图片的话&#xff0c;在程式中可以利用setScaleType进行动态设定&#xff0c;在xml中可以简单的用android:scaleType来…

SpringCloud Eureka参数配置项详解

Eureka涉及到的参数配置项数量众多&#xff0c;它的很多功能都是通过参数配置来实现的&#xff0c;了解这些参数的含义有助于我们更好的应用Eureka的各种功能&#xff0c;下面对Eureka的配置项做具体介绍&#xff0c;供大家参考。 Eureka客户端配置 1、RegistryFetchIntervalSe…

shell执行的特殊变数

shell执行的特殊变数 以下是一些shell执行的特殊变数&#xff1a; $0 这个程式的执行名字 $n 这个程式的第n个参数值&#xff0c;n1..9 $* 这个程式的所有参数,被扩展成"$1c$2c$3"&#xff0c;其中c是IFS的第一个字符。 $# 这个程式的参数个数 $$ 这个程式的PID $! 执…

OAuth 2.0 - Authorization Code授权方式详解

I:OAuth 2.0 开发前期准备 天上不会自然掉馅饼让你轻松地去访问到人家资源服务器里面的用户数据资源&#xff0c;所以你需要做的前期开发准备工作就是把AppKey, AppSecret取到手 新浪获取传送门&#xff0c;腾讯获取传送门 这里说一下&#xff0c;在申请AppKey和AppSecret的过程…

最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

一、spring cloud简介 鉴于《史上最简单的Spring Cloud教程》很受读者欢迎&#xff0c;再次我特意升级了一下版本&#xff0c;目前支持的版本为Spring Boot版本2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE。 Finchley版本的官方文档如下&#xff1a; http://cloud.spri…

最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

在上一篇文章&#xff0c;讲了服务的注册和发现。在微服务架构中&#xff0c;业务都会被拆分成一个独立的服务&#xff0c;服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式&#xff0c;一种是ribbonrestTemplate&#xff0c;另一种是feign。在这一篇文章…

为何断点不停 Application_Start()方法

原因&#xff1a;启动调试Development Server已经启动。 解决方式&#xff1a;停止右下角的Development Server&#xff0c;重新生成. F5转载于:https://www.cnblogs.com/imihiroblog/archive/2012/07/10/2583936.html

链表选择排序算法功能实现演示

算法: 狭义的算法是与数据的存数方式密切相关 广义的算法是与数据的存储方式无关 泛型: 利用某种技术达到的效果就是:不同的存数方式&#xff0c;执行的操作是一样的 #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h&g…

iptables学习(2)

Iptables 的基本配置&#xff0c;首先我们可以先把原有的清空 # iptables –F# iptables –X 设定INPUT、OUTPUT的默认策略为DROP&#xff0c;FORWARD为ACCEPT iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD ACCEPT 打开“回环”&#xff08;自己机器可以…

C#使用SQLite数据库的代码示例

在 .NET 里面使用 SQLite&#xff0c; 我这里使用的wrapper是 System.Data.SQLite&#xff0c;它只需要一个dll,接口符合ADO.Net 2.0的定义,性能也不错,NHibernate用的也是它&#xff0c;目前支持ADO.NET 3.5了&#xff0c;支持集成在 VS2005 和 VS2008里面&#xff0c;而且支持…

链表插入功能实现演示

#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void traverse_list(pNode pHead); …

【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能

这篇博文给大家分享的是&#xff0c;如何使用VS自带的性能分析工具来分析我们编写的.NET程序&#xff0c;一边找出程序性能的瓶颈&#xff0c;改善代码的质量。在实际开发中&#xff0c;性能真的很重要&#xff0c;往往决定一个产品的生死~良好的用户体验的基础之一也是程序要有…

链表删除功能实现演示

插入算法和删除演示&#xff1a; #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void …

如何编写Ajax库

Ajax请求步骤 1. 创建AJax对象 2. 连接服务器 3. 发送请求 4. 接受返回 1 function ajax(url, fnSucc, fnFaild)2 {3 //1.创建ajax对象4 var oAjaxnull;5 6 if(window.XMLHttpRequest)7 {8 oAjaxnew XMLHttpRequest();9 } 10 …

数组和链表的总结

数据结构 狭义: 数据结构是专门研究数据存储的问题 数据的存储包含两方面:个体的存储 个体关 系的存储 广义: 数据结构既包含数据的存储也包含数据的操作 对存储数据的操作就是算法 算法: 狭义&#xff1a; 算法是和数据的存储方式密切相关 广义&#xff1a; 算法和数…

[转]CPoint+CSize+CRect学习大纲

CPointCSizeCRect学习大纲。熟知CPoint、CSize、CRect类的基类class CPoint : public tagPOINTclass CSize : public tagSIZEclass CRect : public tagRECT留意CPoint、CSize、CRect之间的互操作&#xff0c;什么样的操作会涉及这些类型中的两个或多个。Point - Point > Siz…

栈入门

线性结构的两种常见应用之一栈 定义&#xff1a;一种可以实现”先进后出”的存储结构&#xff0c;栈类似于箱子 分类&#xff1a;静态栈、动态栈 算法&#xff1a;出栈、压栈 栈的定义&#xff1a; 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性…

Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由

一、实验目标 掌握交换机Tag VLAN 的配置&#xff1b;掌握三层交换机基本配置方法&#xff1b;掌握三层交换机VLAN路由的配置方法&#xff1b;通过三层交换机实现VLAN间相互通信&#xff1b;二、实验背景 某企业有两个主要部门&#xff0c;技术部和销售部&#xff0c;分处于不同…

栈程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…