【转】RabbitMQ六种队列模式-1.简单队列模式
前言
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) {@Overridepublic 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
【转】RabbitMQ六种队列模式-1.简单队列模式相关推荐
- java简单工厂模式_Java 简单工厂模式
Java 简单工厂模式 2014-05-28·WeaponX 3717 次浏览 ## 介绍 简单工厂模式又称静态工厂模式. 简单工厂模式由工厂类角色.抽象产品角色和具体产品角色组成. 工厂类角色是本模 ...
- 设计模式—工厂模式之简单工厂模式
1. 简单工厂模式简介 简单工厂模式(Simple Factory),又被称为"静态工厂方法模式".它属于"创建模式"(创建对象的模式),并且是"工厂 ...
- 策略模式与简单工厂模式区别(转)
最近一直在抽时间研究设计模式,之前对设计模式也有一定的了解,但是都没有平心静气的去研究过,只是了解了一些皮毛,最近打算再深入研究一下,重新打开了设计模式的数据,对之前的疑问一个个的刨根问底,今天看了简 ...
- Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式
工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...
- 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)
工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...
- 大话设计模式-策略模式与简单工厂模式
来源:http://blog.csdn.net/wulingmin21/article/details/6712684 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策 ...
- 工厂模式——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3) ...
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
转自:http://www.cnblogs.com/stonehat/archive/2012/04/16/2451891.html 设计模式系列--三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂 ...
- GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式
设计模式可以大大提高代码复用性,使得程序的修改更加灵活.另外将各个功能模块抽象解耦出来,在某个模块需要更改时不至于会对整体代码进行修改,解耦的好的话只简单修改几个地方即可以切换某个模块在实现上的切换, ...
最新文章
- 数字图像处理——第三章 空间域图像增强(空间滤波)
- system函数 与 exec函数的区别
- Angular JS 中的内置方法之表单验证
- scp和sftp常用操作
- 阿里云ECI如何6秒扩容3000容器实例?
- 【ZZ】Python安装模块出错(ImportError: No module named s...
- 中介者模式php,PHP设计模式之中介者模式
- fastJson、Jackson对象转json串不使用驼峰方法和json转对象
- php 扩展官,常用的php扩展 - 采集侠官方博客 - 织梦(dedecms)模块插件原创基地
- 换个角度看历史——《军事里的中国史》
- 2.线程和进程的含义和区别,进程间通信方式有哪些?
- 对于网络文学而言 计算机叙事,90年代文学的“增量”
- shape属性详解使用
- 奥特曼html代码,和平精英捏脸代码奥特曼
- Google浏览器密码框自动弹出账号密码的解决方法
- 构建Docker镜像时处理'Configuring tzdata'交互输入
- TabIndex是干什么滴
- ARCHS[@]: unbound variable
- UMLChina建模竞赛第3赛季第3轮(《人月神话》专场)
- html快速创建块,CAD怎么快速创建带编号的块?
热门文章
- 吞吐量(TPS)、QPS、并发数、响应时间(RT)
- Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
- SpringBoot使用Jsp
- 面向对象三大特性: 封装
- 《JavaWeb从入门到改行》注册时向指定邮箱发送邮件激活
- PHP函数之HTMLSPECIALCHARS_DECODE
- ubuntu14.04 upgrade出现【Ubuntu is running in low-graphics mode】问题的一个解决办法
- 给JAVA初学者的50个忠告
- XmlDocument类
- Objective-C 学习笔记