RabbitMQ六种队列模式-简单队列模式
前言
RabbitMQ六种队列模式-简单队列 [本文]
RabbitMQ六种队列模式-工作队列
RabbitMQ六种队列模式-发布订阅
RabbitMQ六种队列模式-路由模式
RabbitMQ六种队列模式-主题模式
在官网的教程中,描述了如上六类工作队列模式:
- 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列。也称为点对点模式
- 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式
- 发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者。称为发布/订阅模式
- 路由模式:在发布/订阅模式的基础上,有选择的接收消息,也就是通过 routing 路由进行匹配条件是否满足接收消息。
- 主题模式:同样是在发布/订阅模式的基础上,根据主题匹配进行筛选是否接收消息,比第四类更灵活。
- RPC模式:与上面其他5种所不同之处,类模式是拥有请求/回复的。也就是有响应的,上面5种都没有。
接下来几篇文章一起来看看这几种队列模式吧,本篇为简单队列模式。
文章目录
1 实现功能2 构建项目2.1 导入依赖2.2 封装Connection3 生产者4 消费者5 测试环节5.1 启动RabbitMQ5.2 创建vhost5.3 依次运行Producer\Customer6 简单队列总结
1 实现功能
功能描述:一个生产者 P 发送消息到队列 Q,一个消费者 C 接收

P 表示为生产者 、C 表示为消费者,红色表示队列。
2 构建项目
创建一个简单的maven项目

- rabbitmq 父工程
-- common 存放公用工具类
-- customer 消费者
-- producer生产者
2.1 导入依赖
在 rabbitmq 父工程 pom.xml 导入 maven 依赖
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.5</version>
</dependency>
</dependencies>
2.2 封装Connection
common模块中封装 rabbitmq 连接类
public class MQConnectionUtils {
public static Connection newConnection() throws IOException, TimeoutException {
/** 1.定义连接工厂 */
ConnectionFactory factory = new ConnectionFactory();
/** 2.设置服务器地址 */
factory.setHost("127.0.0.1");
/** 3.设置协议端口号 */
factory.setPort(5672);
/** 4.设置vhost */
factory.setVirtualHost("test001_host");
/** 5.设置用户名称 */
factory.setUsername("guest");
/** 6.设置用户密码 */
factory.setPassword("guest");
/** 7.创建新的连接 */
Connection newConnection = factory.newConnection();
return newConnection;
}
}
3 生产者
生产者负责创建消息队列并发送消息入列,简单分为5步:
- 获取连接
- 创建通道
- 创建队列声明
- 发送消息
- 关闭队列
public class Producer {
/** 队列名称 */
private static final String QUEUE_NAME = "test_queue";
public static void main(String[] args) throws IOException, TimeoutException {
/** 1.获取连接 */
Connection newConnection = MQConnectionUtils.newConnection();
/** 2.创建通道 */
Channel channel = newConnection.createChannel();
/** 3.创建队列声明 */
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String msg = "我是生产者生成的消息";
System.out.println("生产者发送消息:" + msg);
/** 4.发送消息 */
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
channel.close();
newConnection.close();
}
}
4 消费者
消费者实现和生产者实现过程差不多,但是没有关闭连接和通道,是因为要消费者一直等待随时可能发来的消息,大致分为如下3步:
- 获取连接
- 获取通道
- 监听队列
public class Customer {
/** 队列名称 */
private static final String QUEUE_NAME = "test_queue";
public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("002");
/** 1.获取连接 */
Connection newConnection = MQConnectionUtils.newConnection();
/** 2.获取通道 */
Channel channel = newConnection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String msgString = new String(body, "UTF-8");
System.out.println("消费者获取消息:" + msgString);
}
};
/** 3.监听队列 */
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
}
}
5 测试环节
至此,整个项目代码写完了,接下来就是测试环节
5.1 启动RabbitMQ

5.2 创建vhost

5.3 依次运行Producer\Customer
Producer生产者启动

Rabbit管理平台,三条消息

Customer消费者启动

6 简单队列总结
简单队列也称为点对点,即一个生产者对应一个消费者,生产者发送消息到队列,消费者在队列中取出消息消费。
生产者大致步骤:
- 获取连接
- 创建通道
- 创建队列声明
- 发送消息
- 关闭队列
消费者大致步骤:
- 获取连接
- 获取通道
- 监听队列
- 消费消息
简单队列虽然简单,但是有一些不足,比如这种点对点无疑在复杂情况下会产生大量冗余代码,继续看下一篇工作队列吧。
案例代码:https://www.lanzous.com/i5ydu6d
我创建了一个java相关的公众号,用来记录自己的学习之路,感兴趣的小伙伴可以关注一下微信公众号哈:niceyoo

RabbitMQ六种队列模式-简单队列模式的更多相关文章
- rabbitmq系列一 之简单队列
1. rabbitmq简介 rabbitmq是一个消息代理,或者讲是一个消息中间件.主要是用来接收和转发信息的,它是对消息不做任何处理的.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写 ...
- Java设计模式之工厂模式(简单工厂模式+工厂方法模式)
摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...
- js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象
1.Factory基本写法 <!DOCTYPE html><html lang="en"><head> <meta charset= ...
- Java模式—简单工厂模式
简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式. 目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. ...
- 抽象工厂模式&简单工厂模式
抽象工厂模式 优点: 如IFactory factory=new AccessFactory(),在一个应用中只需要初始化一次,这就使得改变应用的时候变得非常容易:其次它让具体的创建实例过程与客户端分 ...
- 创建型模式(过渡模式) 简单工厂模式(Simple Factory)
简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...
- Java 关于策略模式+简单工厂模式下的思考
导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...
- RabbitMQ六种队列模式-工作队列模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
- RabbitMQ六种队列模式-发布订阅模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
随机推荐
- .NET Core:跨域
在Startup中的ConfigureServices方法中配置:services.AddCors(options => options.AddPolicy("any", b ...
- Unity和Jenkins真是绝配,将打包彻底一键化!
说起打包,我们的QA简直是要抓狂,这个确实我也很同情他们.项目最开始打包是另一个同事做的,打包步骤是有些繁琐,但是项目上线后,不敢轻易动啊!每次他们打包总要跟我抱怨,国内版本打包步骤要10多步还能忍, ...
- python笔记 利用python 自动生成条形码 二维码
1. ean13标准条形码 from pystrich.ean13 import EAN13Encoder encode = EAN13Encoder(') encode.save('d:/barco ...
- linux下发布项目
查看端口
- CentOS中设置Apache服务器网站访问日志[每天的日志]
在阿里云的linux 服务器下Apache的日志默认设置是七天更新一次, 并且所在的目录无法通过FTP浏览器查看, 这样让小白操作起来非常麻烦 可以使用rotatelogs来设置服务器的网站访问日志按 ...
- 【JVM】jmap命令详解----查看JVM内存使用详情
linux获取java进程PID: https://www.cnblogs.com/sxdcgaq8080/p/10734752.html 如果命令使用过程中报错,可能解决你问题的方案: https: ...
- NetCoreApi框架搭建(二、Nlog使用配置)
本文只配置了简单文件存储 1.添加nuget包 2.添加日志配置文件nlog.config 这里配置了三个target区分不同的日志,具体配置需要自己研究,推荐链接https://www.cnblog ...
- 字节输出流FileOutputStream
#字节流 字节输出流FileOutputStream 创建输出流对象 OutputStream 流对象是一个抽象类,不能实例化.所以,我们要找一个具体的子类 :FileOutputStream. 查看 ...
- Centos中编辑php扩展库
今天需要在Centos中编译Exif库以便获取图片的exif信息,可在Linux中从来没有编译过扩展库呀,只好查资料了.发现是用phpize这个东东来编译扩展. 首先执行了下 php -i | gre ...
- JS基石之-----常用方法封装的js库
解析 URL Params 为对象 let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E ...