RabbitMQ从入门到放弃(三)

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

Hello World

前提条件:本文建立在已安装并运行RabbitMQ的场景上。

官方的教程案例中有几个模式,其中Hello World为其中一个,也是最简单的一个。

image.png

上图中的P为生产者,C为消费者,中间红色部分为队列,用来保留生产者发送的消息。接下来我们将用Java编写两个程序:

  • 发送消息的生产者
  • 接收消息的消费者

SpringBoot整合

官网提供的案例采用的是手动创建链接的方式

1
2
3
4
5
6
java复制代码ConnectionFactory factory = new ConnectionFactory();
factory.setHost( "本地主机" );
尝试(连接连接= factory.newConnection();
通道通道 = connection.createChannel()) {

}

基于目前大多数项目使用了SpringBoot框架,因此本文将以SpringBoot整合的方式进行实现。

pom.xml

1
2
3
4
5
xml复制代码<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.6.0</version>
</dependency>

生产者

生产者接口,将消息发送至指定的RabbitMQ队列中。

在生产者类中,我们引用了RabbitTemplate对象,RabbitTemplateRabbitMQ在与SpringAMQP整合的时,Spring提供的即时消息模板。

同时定义了队列的名称hello_world

还有一个发送消息的接口,入参为需要发送的消息。

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
typescript复制代码/**
* 生产者: 发送消息的程序
*
* @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 + "】已发出";
}
}

调用生产者接口,得到响应结果
image.png

通过MQ队列可以看到在指定的hello_world里面有一条信息待消费

image.png

消费者

消费者接口,监听来自RabbitMQ指定队列的消息。

image.png

在消费者类中,我们定义一个监听的队列QUEUE_NAME, 同时在方法入口上方加上注解@RabbitListener(queues = QUEUE_NAME)用于监听RabbitMQ中指定队列的消息,当队列中有消息的时候,该接口会触发监听事件,将其进行消费。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
java复制代码/**
* 消费者:接收消息的程序
*
* @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中有消息,消费并在控制台打印
image.png

查看队列,Ready已变为0
image.png

最后

文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!

如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%