关闭

Spring Cloud Bus之RabbitMQ初窥

标签: spring
541人阅读 评论(1) 收藏 举报
分类:

和Spring Cloud Config一样,我们接下来要聊的Spring Cloud Bus也是微服务架构系统中的必备组件。Spring Cloud Bus可以将分布式系统的节点与轻量级消息代理链接,然后可以实现广播状态更改(例如配置更改)或广播其他管理指令。Spring Cloud Bus就像一个分布式执行器,用于扩展的Spring Boot应用程序,但也可以用作应用程序之间的通信通道。那么这里就涉及到了消息代理,目前流行的消息代理中间件有不少,Spring Cloud Bus支持RabbitMQ和Kafka,本文我们主要来看看RabbitMQ的基本使用。


本文是Spring Cloud系列的第二十六篇文章,了解前二十五篇文章内容有助于更好的理解本文:

1.使用Spring Cloud搭建服务注册中心
2.使用Spring Cloud搭建高可用服务注册中心
3.Spring Cloud中服务的发现与消费
4.Eureka中的核心概念
5.什么是客户端负载均衡
6.Spring RestTemplate中几种常见的请求方式
7.RestTemplate的逆袭之路,从发送请求到负载均衡
8.Spring Cloud中负载均衡器概览
9.Spring Cloud中的负载均衡策略
10.Spring Cloud中的断路器Hystrix
11.Spring Cloud自定义Hystrix请求命令
12.Spring Cloud中Hystrix的服务降级与异常处理
13.Spring Cloud中Hystrix的请求缓存
14.Spring Cloud中Hystrix的请求合并
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控
16.Spring Cloud中声明式服务调用Feign
17.Spring Cloud中Feign的继承特性
18.Spring Cloud中Feign配置详解
19.Spring Cloud中的API网关服务Zuul
20.Spring Cloud Zuul中路由配置细节
21.Spring Cloud Zuul中异常处理细节
22.分布式配置中心Spring Cloud Config初窥
23.Spring Cloud Config服务端配置细节(一)
24.Spring Cloud Config服务端配置细节(二)之加密解密
25.Spring Cloud Config客户端配置细节


RabbitMQ安装配置

RabbitMQ是用Erlang语言编写的,因此安装RabbitMQ之前我们要先安装Erlang环境,首先去http://www.erlang.org/downloads地址下载erlang,下载到的是一个exe文件,直接双击安装即可,然后去http://www.rabbitmq.com/download.html地址下载RabbitMQ,下载成功之后,也是一个exe,双击安装即可(我在网上看到有人说安装目录不能有空格,我自己的软件安装目录都是没有空格的,所以没去验证这句话真假,小伙伴们注意下别掉坑里了)。RabbitMQ安装成功之后,默认会创建系统服务,将和Windows系统一起启动。所以安装成功之后,打开系统服务,我们如果看到如下结果表示安装成功了:

这里写图片描述

安装成功之后,我们可以使用web来管理我们的RabbitMQ,管理之前需要我们先开启web管理功能,开启方式:进入到安装目录的sbin目录下,然后执行 .\rabbitmq-plugins enable rabbitmq_management命令,如下:

这里写图片描述

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

这里写图片描述

这个管理页面涉及到的信息面板比较多,我们后面在用到的时候都会给小伙伴们一一介绍,好了,登录成功之后,我们可以先尝试创建一个用户,创建用户页面如下:

这里写图片描述

输入用户名密码就可以创建了,tags表示用户标签,相当于角色,可选值有management、none、policymaker、monitoring和administrator,不同取值所对应的权限区别如下:

none

1.不能访问 management plugin

management

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

1.列出自己可以通过AMQP登入的virtual hosts
2.查看自己的virtual hosts中的queues, exchanges 和 bindings
3.查看和关闭自己的channels 和 connections
4.查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动

policymaker

management可以做的任何事外加:

1.查看、创建和删除自己的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

OK,我这里就自己创建一个sang用户一会使用(当然不创建也可以,不创建就直接使用默认的guest用户),sang用户创建好之后,点击用户名,给用户设置virtual hosts,否则一会使用这个用户的时候会报错。设置方式如下:

这里写图片描述

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

简单案例

整合案例是非常简单的。

工程创建

首先我们来创建一个普通的Spring Boot工程,然后添加如下依赖:

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

属性配置

接下来在application.properties中配置RabbitMQ的连接信息,如下:

spring.application.name=rabbitmq-hello
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=sang
spring.rabbitmq.password=123456
server.port=2009

这里我们分别配置了RabbitMQ的地址为localhost,端口为5672(注意这里没写错,web管理端端口是15672),用户名和密码则是我们刚刚创建出来的(也可以使用默认的guest)。

创建消息生产者

发送消息我们有一个现成的封装好的对象AmqpTemplate,通过AmqpTemplate我们可以直接向某一个消息队列发送消息,消息生产者的定义方式如下:

@Component
public class Sender {
    @Autowired
    private AmqpTemplate rabbitTemplate;
    public void send() {
        String msg = "hello rabbitmq:"+new Date();
        System.out.println("Sender:"+msg);
        this.rabbitTemplate.convertAndSend("hello", msg);
    }
}

注入AmqpTemplate,然后利用AmqpTemplate向一个名为hello的消息队列中发送消息。

创建消息消费者

@Component
@RabbitListener(queues = "hello")
public class Receiver {
    @RabbitHandler
    public void process(String msg) {
        System.out.println("Receiver:"+msg);
    }
}

@RabbitListener(queues = “hello”)注解表示该消息消费者监听hello这个消息队列,@RabbitHandler注解则表示process方法是用来处理接收到的消息的,我们这里收到消息后直接打印即可。

配置消息队列Bean

@Configuration
public class RabbitConfig {
    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }
}

创建一个名为hello的消息队列。

测试

创建单元测试类,用来发送消息,如下:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = RabbitmqHelloApplication.class)
public class RabbitmqHelloApplicationTests {

    @Autowired
    private Sender sender;

    @Test
    public void contextLoads() {
        sender.send();
    }
}

上面所有的工作做完后,我们就可以启动我们的Spring Boot工程了,启动成功后,我们可以在启动日志中看到如下内容:

这里写图片描述

这个表示程序已经创建了一个访问RabbitMQ的连接,此时在RabbitMQ的web管理面板中,我们也可以看到连接信息,如下:

这里写图片描述
这里写图片描述
这里写图片描述

此时运行执行单元测试发送发送一条消息,我们可以在单元测试执行的控制台看到如下日志,表示消息已经发送出去了:

这里写图片描述

然后在程序运行的控制台也可以看到如下日志,表示消息已经接收到了:

这里写图片描述

好了,RabbitMQ我们就先介绍到这里,有问题欢迎小伙伴们留言讨论。

参考资料:

1.《Spring Cloud实战》

更多JavaEE资料请关注公众号:

这里写图片描述

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring Cloud刷新配置中心配置——消息总线RabbitMQ

在http://blog.csdn.net/a60782885/article/details/69415527的最后,我们提到了配置的刷新,但是这显然是麻烦的,如果多个服务使用了这个配置,当我们修改配置信息的时候,如果我们希望服务的配置也跟着修改,我们就不得不一个一个服务的发送POST请求,或者关...
  • a60782885
  • a60782885
  • 2017-04-14 16:42
  • 5025

Spring Cloud构建微服务架构(七)消息总线

先回顾一下,在之前的Spring Cloud Config的介绍中,我们还留了一个悬念:如何实现对配置信息的实时更新。虽然,我们已经能够通过/refresh接口和Git仓库的Web Hook来实现Git仓库中的内容修改触发应用程序的属性更新。但是,若所有触发操作均需要我们手工去维护Web Hoo...
  • sosfnima
  • sosfnima
  • 2016-11-15 22:04
  • 15979

史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)

Spring Cloud Bus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。本文要讲述的是用AMQP实现通知微服务架构的配置文件的更改。一、准备工作本文还是基于上一篇文章来实...
  • forezp
  • forezp
  • 2017-04-12 22:15
  • 164498

spring cloud 中消息总线(bus)使用

spring cloud bus使用及相关背景知识。
  • BuquTianya
  • BuquTianya
  • 2017-12-02 22:14
  • 203

springcloud-config组件的配置和使用

目前项目中用到的配置切换方式,是使用maven定义profile进行的,配置的修改需要重新打包,线上的节点一多,打包和部署就是一项大工程。    流行点的配置管理平台有百度的disconf ,淘宝的diamond等等。    SpringCloud微...
  • Yoara
  • Yoara
  • 2017-02-21 17:12
  • 2469

SpringCloud微服务实战之消息总线BUS-RabbitMQ

Spring Cloud Bus支持两款消息中间件:RabbitMQ、Kafka。 一、RabbitMQ实现消息总线 1、RabbitMQ简介 RabbitMQ是实现了高级消息对列协议(AMQP)的开源消息代理软件,它是用高性能、可伸缩而闻名的Erlang语言编写而成的,其集群和故障转移是构建在...
  • u012343297
  • u012343297
  • 2017-12-22 13:55
  • 167

史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)

spring Cloud Bus 将分布式的节点和轻量的消息代理连接起来。这可以用于广播配置文件的更改或者其他的管理工作。一个关键的思想就是,消息总线可以为微服务做监控,也可以作为应用程序之间相互通讯。本文要讲述的是用AMQP实现通知微服务架构的配置文件的更改。 一、准备工作 ...
  • fend0875
  • fend0875
  • 2017-04-21 14:10
  • 1183

SpringCloud(第 037 篇)通过bus/refresh半自动刷新ConfigClient配置

SpringCloud(第 037 篇)通过bus/refresh半自动刷新ConfigClient配置-一、大致介绍1、上章节我们讲到了手动刷新配置,但是我们假设如果微服务一多的话,那么我们是不是需要对每台服务进行手动刷新呢? 2、答案肯定是不需要的,我们也可以采用 rabbitmq 消息中间件产...
  • YLIMH_HMILY
  • YLIMH_HMILY
  • 2017-10-19 12:49
  • 421

Spring Cloud构建微服务架构(七)消息总线(续:Kafka)

Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka。在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud Bus对Kafka的支持,实现消息总线的功能。由于本文会以之前Rabbit的实现作为基础来修改,所以先...
  • sosfnima
  • sosfnima
  • 2016-11-15 22:26
  • 4307

用Spring cloud Stream来开发基于MQ消息驱动的微服务

Spring boot对MQ类如RabbitMQ、kafka支持都很好,但是仍然要写一些模板代码。Spring cloud stream进一步掩盖了这个差异,仅仅使用配置就可以完成。   Spring cloud Stream 用了基于topic-subsriber的模式,虽然不支持全...
  • HoLee_BK
  • HoLee_BK
  • 2017-06-23 14:20
  • 1419
    个人资料
    • 访问:1796408次
    • 积分:18244
    • 等级:
    • 排名:第600名
    • 原创:321篇
    • 转载:1篇
    • 译文:2篇
    • 评论:940条
    更多JavaEE资料请关注公众号
    博客专栏
    最新评论