Spring Cloud Bus之RabbitMQ初窥

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


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

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客户端配置细节spring


RabbitMQ安装配置

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,web管理页面以下: 架构

图片描述

这个管理页面涉及到的信息面板比较多,咱们后面在用到的时候都会给小伙伴们一一介绍,好了,登陆成功以后,咱们能够先尝试建立一个用户,建立用户页面以下: app

图片描述

输入用户名密码就能够建立了,tags表示用户标签,至关于角色,可选值有management、none、policymaker、monitoring和administrator,不一样取值所对应的权限区别以下:负载均衡

none

1.不能访问 management plugin分布式

management

用户能够经过AMQP作的任何事外加:spring-boot

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资料请关注公众号:

图片描述

相关文章
相关标签/搜索