Spring Cloud Bus之RabbitMQ初窥

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


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(gh_d1ca11234a30)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

Kali Linux Web渗透测试手册(第二版) - 1.2 - Firefox浏览器下安装一些常用的插件

1.2、为渗透测试配置web浏览器(即在Firefox浏览器下安装一些常用的插件)

33740
来自专栏应用案例

SSM框架搭建

ssm框架的学习小结,主要是初期环境的搭建配置以及信息的交互处理过程,非技术人员请绕道~ SpringMVC其实就是Spring框架的一个模块,是一个基于MVC...

487100
来自专栏纯洁的微笑

springboot(十六):使用Jenkins部署Spring Boot

jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤; 第一步,jen...

69770
来自专栏耕耘实录

RHEL7、CentOS7的服务管理-系统管理(4)

从RHEL7的官方文档中我们,可以看出在未来service和chkconfig可能会退出历史舞台,现在的发行版中还保留这些命令最主的原因是考虑了兼容性,在使用中...

11530
来自专栏青玉伏案

JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术

在上篇博客中,我们聊了《JavaEE开发之SpringMVC中的自定义拦截器及异常处理》。本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js、...

24360
来自专栏Rainbond开源「容器云平台」

好雨云帮一周问答集锦(2017.04.17-2017.04.23)

14230
来自专栏SpringBoot 核心技术

第四章:使用Druid作为SpringBoot项目数据源(添加监控)

49870
来自专栏cloudskyme

WSO2 ESB(1)

什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线。WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,...

42740
来自专栏大闲人柴毛毛

Linux账号管理

Linux的账号管理包括用户与用户组,它们两者是多对多的关系,即一个用户可以属于多个用户组,且一个用户组可以包含多个用户。一个用户组中的用户具有相同的权限。 ...

60870
来自专栏jimbochen的专栏

在命令行中调试 django 项目中的模块方法

如果在日常开发中有些模块需要在反复运行调试,但是又依赖了django框架的组件,需要启动框架后才能正常执行,本文提供一个简单可行的方案简化了这个调试过程。

1.1K00

扫码关注云+社区

领取腾讯云代金券