写在开始:一个搬砖程序员的随缘记录
一、RabbitMQ简介
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,消息队列是一种应用系统之间的通信方法,是通过读写出入队列的消息来通信(RPC则是通过直接调用彼此来通信的)
AMQP(Advanced Message Queuing Protocol)高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
二、RabbitMQ详解
包含内容:
Producer:生产者,消息发送者
Consumer :消费者,接收消息者
Broker :消息中间件的服务节点
Queue :队列,用来接收生产者发送的消息
Exchange:交换机
RoutingKey :路由键
Binding :用于绑定交换机和路由键
RabbitMQ简单流程图
RabbitMQ简单流程图
三、RabbitMQ安装和使用
1、安装RabbitMQ
mac版本RabbitMQ安装可看我写的文章
Mac安装RabbitMQ
2、使用
SpringBoot项目整体结构
下面是具体的代码
pom.xml
<!-- rabbitMq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
application.yml
server:
port: 8080 #端口号
spring:
application:
name: rabbitmq
rabbitmq:
host: localhost #rabbitmq host
port: 5672 #rabbitmq port
username: guest #rabbitmq账号
password: guest #rabbitmq密码
RabbitMQ配置类
QueueConfig.Java
package com.cn.rabbitmq.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* rabbitMQ配置类
* @author demo
* @date 2020/11/12 18:33
*/
@Configuration
public class QueueConfig {
/**
* 初始化队列
* 队列名称 QueueTest
*/
@Bean
public Queue queueTest() {
// durable:是否持久化,默认是false
return new Queue("QueueTest", true);
}
/**
* 初始化交换机
* 队列名称 ExchangeTest
*/
@Bean
DirectExchange exchangeTest() {
return new DirectExchange("ExchangeTest", true, false);
}
/**
* 将队列和交换机绑定
* 设置用于匹配键:RoutingTest
*/
@Bean
Binding bindingDirect() {
return BindingBuilder.bind(queueTest()).to(exchangeTest()).with("RoutingTest");
}
}
消息消费类
DirectReceiver.Java
package com.cn.rabbitmq.config;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 消息消费
* @author demo
* @date 2020/11/12 18:47
*/
@Component
//指定消费队列名称QueueTest
@RabbitListener(queues = "QueueTest")
public class DirectReceiver {
@RabbitHandler
public void process(String message) {
System.out.println("接收到的消息: " + message);
}
}
发送消息Controller
SendMessageController.Java
package com.cn.rabbitmq.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 消息生产
* @author demo
* @date 2020/11/12 18:41
*/
@RestController
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class SendMessageController {
/**
* rabbit消息发送/接收等方法
* */
private final RabbitTemplate rabbitTemplate;
@GetMapping("/sendMessage")
public String sendMessage() {
//将消息携带绑定键值:RoutingTest 发送到交换机ExchangeTest
rabbitTemplate.convertAndSend("ExchangeTest", "RoutingTest", "Hello Word!");
return "发送成功";
}
}
然后启动项目
请求发送消息接口:http://localhost:8080/sendMessage
打开日志看下消费信息
这就是一个简单的RabbitMQ运行流程
Over