这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战
Hello World
前提条件:本文建立在已安装并运行
RabbitMQ
的场景上。
官方的教程案例中有几个模式,其中Hello World
为其中一个,也是最简单的一个。
上图中的P
为生产者,C
为消费者,中间红色部分为队列,用来保留生产者发送的消息。接下来我们将用Java编写两个程序:
- 发送消息的生产者
- 接收消息的消费者
SpringBoot整合
官网提供的案例采用的是手动创建链接的方式
ConnectionFactory factory = new ConnectionFactory();
factory.setHost( "本地主机" );
尝试(连接连接= factory.newConnection();
通道通道 = connection.createChannel()) {
}
复制代码
基于目前大多数项目使用了SpringBoot
框架,因此本文将以SpringBoot
整合的方式进行实现。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.6.0</version>
</dependency>
复制代码
生产者
生产者接口,将消息发送至指定的RabbitMQ
队列中。
在生产者类中,我们引用了RabbitTemplate
对象,RabbitTemplate
是RabbitMQ
在与SpringAMQP
整合的时,Spring
提供的即时消息模板。
同时定义了队列的名称hello_world
。
还有一个发送消息的接口,入参为需要发送的消息。
/**
* 生产者: 发送消息的程序
*
* @author unidentifiable
* @date 2021/11/25
*/
@RestController
@RequestMapping("/producer")
public class Producer {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 队列名称
*/
private static final String QUEUE_NAME = "hello_world";
/**
* 发现消息
*
* @param msg 待发送的消息
* @return java.lang.String
*/
@GetMapping("/sendMsg")
public String sendMsg(String msg){
// 将消息发送至指定的队列中
rabbitTemplate.send(QUEUE_NAME, new Message(msg.getBytes(StandardCharsets.UTF_8)));
return "消息【" + msg + "】已发出";
}
}
复制代码
调用生产者接口,得到响应结果
通过MQ队列可以看到在指定的hello_world
里面有一条信息待消费
消费者
消费者接口,监听来自RabbitMQ
指定队列的消息。
在消费者类中,我们定义一个监听的队列QUEUE_NAME
, 同时在方法入口上方加上注解@RabbitListener(queues = QUEUE_NAME)
用于监听RabbitMQ
中指定队列的消息,当队列中有消息的时候,该接口会触发监听事件,将其进行消费。
/**
* 消费者:接收消息的程序
*
* @author unidentifiable
* @date 2021/11/25
*/
@Component
public class Consumer {
private static final String QUEUE_NAME = "hello_world";
/**
* 监听队列
*/
@RabbitListener(queues = QUEUE_NAME)
public void receive(String msg) {
System.out.println("接收到的消息为:" + msg);
}
}
复制代码
监听到MQ中有消息,消费并在控制台打印
查看队列,Ready
已变为0
最后
文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!
如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!
近期评论