概述
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
,这里有最专业的人为你排忧解难,有最新的学习资源免费为你共享。