RabbitMQ从入门到放弃(三)

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

Hello World

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

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

image.png

上图中的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对象,RabbitTemplateRabbitMQ在与SpringAMQP整合的时,Spring提供的即时消息模板。

同时定义了队列的名称hello_world

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

image.png

/**
 * 生产者: 发送消息的程序
 *
 * @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中指定队列的消息,当队列中有消息的时候,该接口会触发监听事件,将其进行消费。

/**
 * 消费者:接收消息的程序
 *
 * @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

最后

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

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