【RabbitMQ二】——RabbitMQ入门教程(简单模式)

简介: 【RabbitMQ二】——RabbitMQ入门教程(简单模式)

RabbitMQ入门教程(简单模式)

前言

本篇博客主要是实现RabbitMQ最简单的模式,一个生产者,一个队列,一个消费者。通过本篇博客能够掌握RabbitMQ最基本的运用。

本篇博客主要学习至RabbitMQ官网的教程,RabbitMQ官网教程地址

入门教程选择最简单的模式,本篇博客选择的是Java语言


RabbitMQ相关术语

RabbitMQ是一个消息代理,RabbitMQ接收和转发消息。可以把它看做一个邮局,当你把邮件放进邮箱中,邮递员一定会将邮件邮递到接收邮件的人那里。在这个实例中,RabbitMQ可以是邮箱、邮局、和邮递员。
Producer(生产者):

一个发送消息的程序是一个生产者


queue(队列):

队列可以看做是一个邮箱,队列只受主机的内存和磁盘限制,它本质上是一个大的消息缓冲区。许多生产者可以向一个队列发送消息,许多消费者可以尝试从一个队列接收数据。


consumer(消费者):

一个主要等待接收消息的程序

RabbitMQ简单模式示例

**业务场景:**使用JAVA编写两个程序,一个生产者发送一条消息,一个消费者接受消息并把消息打印出来。

首先创建一个Maven项目在pom文件中引入RabbitMQ java client依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>

编写生产者Send.java类

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : Send
 * @description : [消息生产者类]
 * @createTime : [2023/1/13 8:21]
 * @updateUser : [WangWei]
 * @updateTime : [2023/1/13 8:21]
 * @updateRemark : [描述说明本次修改内容]
 */
public class Send {
    private final static String QUEUE_NAME = "hello";
    public static void main(String[] argv) throws Exception {
      //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //RabbitMQ服务器ip地址
        factory.setHost("ip");
        //端口号  默认值为5672
        factory.setPort(5672);
        //为用户分配的虚拟主机 默认值为/
        factory.setVirtualHost("/");
        //用户名  默认为guest
        factory.setUsername("用户名");
        //密码   默认为guest
        factory.setPassword("密码");
        //创建连接
        try (Connection connection = factory.newConnection();
          //创建Channel
             Channel channel = connection.createChannel()) {
            //声明队列,声明一个队列是幂等的——它只会在它不存在的情况下被创建。
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            //生产的消息
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

编写消费者Recv.java类

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : Recv
 * @description : [消费者类]
 * @createTime : [2023/1/13 8:27]
 * @updateUser : [WangWei]
 * @updateTime : [2023/1/13 8:27]
 * @updateRemark : [描述说明本次修改内容]
 */
public class Recv {
    private final static String QUEUE_NAME = "hello";
    public static void main(String[] argv) throws Exception {
        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //RabbitMQ服务器ip地址
        factory.setHost("ip");
        //端口号  默认值为5672
        factory.setPort(5672);
        //为用户分配的虚拟主机 默认值为/
        factory.setVirtualHost("/");
        //用户名  默认为guest
        factory.setUsername("用户名");
        //密码   默认为guest
        factory.setPassword("密码");
        //打开一个连接和通道,并声明队列
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        //这里也声明了队列。因为可能会在发布者之前启动消费者,所以我们希望在尝试从队列中消费消息之前确保队列存在。
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    //我们要告诉服务器将队列中的消息传递给我们。因为它将异步地向我们推送消息,所以我们以对象的形式提供了一个回调,该回调将缓冲消息,直到我们准备好使用它们。这就是DeliverCallback子类所做的。
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}

运行生产者类生产消息,执行Send类中的Main方法,执行的结果图



访问RabbitMQ Web端,可以在queue中找到名为hello的队列,可以看到已经有一条消息在队列中了。


运行消费者类,消费这条消息,并将消息内容打印到控制台上。



再次访问RabbitMQ web端,可以在hello队列中看到消息已经被消费了。



总结

入门教程只是简单的运用,里面的具体细节是没有具体分析的。但是能够起到初步接触和使用RabbitMQ进行消息的存储、转发。

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
2月前
|
消息中间件
RabbitMQ的 RPC 消息模式你会了吗?
【9月更文挑战第11天】RabbitMQ 的 RPC(远程过程调用)消息模式允许客户端向服务器发送请求并接收响应。其基本原理包括:1) 客户端发送请求,创建回调队列并设置关联标识符;2) 服务器接收请求并发送响应至回调队列;3) 客户端根据关联标识符接收并匹配响应。实现步骤涵盖客户端和服务器的连接、信道创建及请求处理。注意事项包括关联标识符唯一性、回调队列管理、错误处理及性能考虑。RPC 模式适用于构建可靠的分布式应用程序,但需根据需求调整优化。
|
3月前
|
消息中间件 开发者
【RabbitMQ深度解析】Topic交换器与模式匹配:掌握消息路由的艺术!
【8月更文挑战第24天】在消息队列(MQ)体系中,交换器作为核心组件之一负责消息路由。特别是`topic`类型的交换器,它通过模式匹配实现消息的精准分发,适用于发布-订阅模式。不同于直接交换器和扇形交换器,`topic`交换器支持更复杂的路由策略,通过带有通配符(如 * 和 #)的模式字符串来定义队列与交换器间的绑定关系。
54 2
|
3月前
|
消息中间件
RabbitMQ广播模式
RabbitMQ广播模式
51 1
|
3月前
|
消息中间件 应用服务中间件 网络安全
rabbitMQ镜像模式搭建
rabbitMQ镜像模式搭建
|
4月前
|
消息中间件 传感器 负载均衡
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
|
3月前
|
消息中间件 Java Maven
RabbitMQ通配符模式
RabbitMQ通配符模式
57 0
|
4月前
|
消息中间件 存储 Kafka
MetaQ/RocketMQ 原理问题之RocketMQ DLedger融合模式的问题如何解决
MetaQ/RocketMQ 原理问题之RocketMQ DLedger融合模式的问题如何解决
|
4月前
|
消息中间件 Java Apache
消息队列 MQ使用问题之如何在内外网环境下使用单组节点单副本模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
消息中间件 负载均衡 RocketMQ
MetaQ/RocketMQ 原理问题之在广播模式下,RebalanceService工作的问题如何解决
MetaQ/RocketMQ 原理问题之在广播模式下,RebalanceService工作的问题如何解决
|
5月前
|
消息中间件
RabbitMQ配置单活模式队列
RabbitMQ配置单活模式队列
113 0