SpringBoot 整合 RabbitMQ

2018-09-21 15:41:59 浏览数 (1)

概述

RabbitMQ 是由 Erlang 语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也可称为面向消息的中间件)。其支持 Windows、Linux/Unix、MAC OS 等操作系统和包括 Java 在内的多种编程语言。

AMQP,即 Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计;基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件不同产品,不同的开发语言等条件的限制。

RabbitMQ 的重要概念有以下几个:

Broker:接收消息,分发消息应用; Exchange:消息交换机;指定消息按照什么规则路由到哪个队列 Queue; Queue:消息队列,存储消息的载体; Binding:Exchange 和 Queue 之间的虚拟连接;Binding 中可以包含 RoutingKey,其信息被保存到 Exchange 中的查询表中,作为 Message 的分发依据; RoutingKey:路由关键字,Exchange 根据 RoutingKey 将消息投递到对应的队列中; Vhost:虚拟主机,一个 Broker 可以有多个虚拟主机,用作不同用户的权限分离;一个虚拟主机持有一组 Exchange、Queue 和 Binding; Producer:消息生产者,主要将消息投递到对应的 Exchange 上面; Consumer:消息消费者,消息的接收者,一般是独立的程序; Channel:消息通道,也称信道。在客户端的每个连接里可以建立多个 Channel,每个 Channel 代表一个会话任务。

CentOS 7 安装 RabbitMQ

1.添加 Erlang 源:

代码语言:javascript复制
vim /etc/yum.repos.d/rabbitmq-erlang.repo 

文件中添加如下内容保存:

代码语言:javascript复制
[rabbitmq-erlang] 
name=rabbitmq-erlang 
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 
gpgcheck=1 
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1 

2. 新建目录:

代码语言:javascript复制
mkdir /usr/local/software; 

3. 下载 RabbitMQ rpm 安装文件:

代码语言:javascript复制
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm; 

4. 安装 RabbitMQ Server:

代码语言:javascript复制
yum install -y rabbitmq-server-3.7.4-1.el7.noarch.rpm; 

5. 安装 RabbitMQ Web 管理界面并启动 RabbitMQ Server:

代码语言:javascript复制
rabbitmq-plugins enable rabbitmq_management systemctl start rabbitmq-server; 

6. 由于 RabbitMQ 默认用户 Guest 只能访问安装在 RabbitMQ 本机上的 Web 管理页面,因此当 RabbitMQ 安装在 Linux 服务器上时,需要做如下操作才能在别的机器上访问其 Web管理页面:

添加用户:

代码语言:javascript复制
rabbitmqctl add_user root 123456 

其中 root 表示新添加用户名,123456 表示登录密码;

赋予用户权限:

赋予用户角色:

代码语言:javascript复制
rabbitmqctl set_permissions -p "/" root '.' '.' '.*'; 

rabbitmqctl setusertags root administrator;

查看 RabbitMQ 用户:

代码语言:javascript复制
rabbitmqctl list_users。 

访问:http://192.168.1.201:15672,得到 RabbitMQ Web 管理页面:

此时,RabbitMQ 已经安装成功。

整合RabbitMQ

1.在 pom 文件中添加依赖:

代码语言:javascript复制
org.springframework.boot 

spring-boot-starter-amqp 

2. 在 application.yml 配置文件中添加如下配置:

代码语言:javascript复制
spring: 
      rabbitmq: 
             host: 192.168.1.120
             port: 5672 
             username: root 
             password: hcb13579 

3. 在 RabbitMQ 中新建一个名为“myQueue”的队列:

代码语言:javascript复制
@Configuration 
public class RabbitmqConfig { 
   @Bean 
   public Queue queue(){ 
     return new Queue("myQueue"); 
   } 
} 

4. 利用 AmqpTemplate 向队列中发送消息:

代码语言:javascript复制
@RestController 
@RequestMapping("/rabbitmq") 
public class RabbitmqController { 
@Autowired private AmqpTemplate amqpTemplate;
@RequestMapping("/sendMessage")
public String sendMessageToMq(String msg) {
        amqpTemplate.convertAndSend(CommonConstants.RABBITMQ_QUEUE_NAME, msg);

    return "send message successfully";
}
} 

5. 消费消息:

代码语言:javascript复制
@Component 
@RabbitListener(queues = {CommonConstants.RABBITMQQUEUENAME}) 
public class RabbitmqConsumer {
@RabbitHandler
public void consumeMessage(String msg){
    System.out.println("接受到的消息:"  msg);
}
} 

6. 启动程序,利用 Postman 测试:

如果你想成为一名优秀的java架构师,想学习Java高阶技术基础、框架技术的源码级分析、linux、SpringBoot、SpringCloud、阿里微服务框架Dubbo、Docker构建微服务或者在工作中遇到瓶颈,想跳槽加薪,面试不过, 碰到难题等等一系列问题,可以加我的架构师群:862039307,这里有最专业的人为你排忧解难,有最新的学习资源免费为你共享。

0 人点赞