【转】RabbitMQ六种队列模式-1.简单队列模式

前言

RabbitMQ六种队列模式-简单队列 [本文]
RabbitMQ六种队列模式-工作队列
RabbitMQ六种队列模式-发布订阅
RabbitMQ六种队列模式-路由模式
RabbitMQ六种队列模式-主题模式

在官网的教程中,描述了如上六类工作队列模式:

  1. 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列。也称为点对点模式
  2. 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式
  3. 发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者。称为发布/订阅模式
  4. 路由模式:在发布/订阅模式的基础上,有选择的接收消息,也就是通过 routing 路由进行匹配条件是否满足接收消息。
  5. 主题模式:同样是在发布/订阅模式的基础上,根据主题匹配进行筛选是否接收消息,比第四类更灵活。
  6. 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步:

  1. 获取连接
  2. 创建通道
  3. 创建队列声明
  4. 发送消息
  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步:

  1. 获取连接
  2. 获取通道
  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 简单队列总结

简单队列也称为点对点,即一个生产者对应一个消费者,生产者发送消息到队列,消费者在队列中取出消息消费。

生产者大致步骤:

  1. 获取连接
  2. 创建通道
  3. 创建队列声明
  4. 发送消息
  5. 关闭队列

消费者大致步骤:

  1. 获取连接
  2. 获取通道
  3. 监听队列
  4. 消费消息

简单队列虽然简单,但是有一些不足,比如这种点对点无疑在复杂情况下会产生大量冗余代码,继续看下一篇工作队列吧。

案例代码:https://www.lanzous.com/i5ydu6d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

词汇释义

原语&#xff1a;原子语言&#xff0c;执行过程中不能被打断。原&#xff0c;并不是指原来的&#xff0c;初始的&#xff0c;是指原子&#xff01;表示不可分割的意思。

【转】RabbitMQ六种队列模式-2.工作队列模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 上文我们了解了 RabbitMQ 六种队列模式中的简单队列&#xff0c;代码也是非常的简单&#xff0c;比较容易…

redis 哨兵模式 cluster模式区别_Redis哨兵(Sentinel)模式快速入门

当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;这就需要人工干预&#xff0c;费事费力&#xff0c;还会造成一段时间内服务不可用。 所以更多时候&#xff0c;我们优先考虑哨兵(sentinel) 模式。Redis sentinel是Redis高可用实现方案&#xff…

IOS开发入门笔记

IB&#xff1a;IB是指Interface Builder&#xff0c;如IBAction&#xff0c;IBOutlet。IBOutlet和IBAction是什么&#xff1f;IBOutlet&#xff1a;中文翻译应该是&#xff1a;插座&#xff0c;连接点&#xff08;书上写的是出口&#xff09;。autorelease相当于Qt中的deleteLa…

【转】RabbitMQ六种队列模式-3.发布订阅模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 上文的工作队列模式是直接在生产者与消费者里声明好一个队列&#xff0c;这种情况下消息只会对应同类型的…

Microsoft C 运行时库 (CRT) 参考

链接&#xff1a;https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/c-run-time-library-reference?viewmsvc-160 重要文章&#xff1a; 跨 DLL 边界传递 CRT 对象时可能的错误 如果应用程序使用多个 CRT 版本&#xff0c;将存在什么问题&#xff1f;

组建一个局域网一般会用到哪些设备_路由器和交换机的区别是什么?在实际使用中有哪些不同...

电工之家&#xff1a;www.dgzj.com QQ群&#xff1a;2179090关注电工之家官方微信公众号“电工之家”&#xff0c;收获更多经验知识。其实关于路由器和交换机确实有很多人容易混淆&#xff0c;包括猫MOdem&#xff0c;我最初就认为猫就是路由器&#xff0c;现在回想起来真的傻…

【转】RabbitMQ六种队列模式-4.路由模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主题模式 本文带大家了解 RabbitMQ 队列模式中的路由模式。 其实只要看过上篇发布模式后&#xff0c;相信路由模式…

百度二年级手工机器人_让父母少弯腰的家务神器——追觅扫拖机器人慧目F9评测...

大家好&#xff0c;我是CC。父母都已过了花甲之年&#xff0c;退休在家本应是享清福的时候&#xff0c;为了照顾双上班族的我&#xff0c;平时承担了接儿子放学和给我蹭晚餐的任务&#xff0c;操劳不少。眼看着他们一点点老去&#xff0c;总想也为他们做点什么&#xff0c;所以…

宝藏Git学习资源

Learn Git Branching 这才是真正的Git——Git内部原理揭秘&#xff01;

【转】RabbitMQ六种队列模式-5.主题模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 [本文] 从前面的几篇我们依次经历了 exchange 模式从 fanout > direct 的转变过程&#xff0c;在 fanout 时&a…

javase哪部分最难_高中物理哪部分最难?这里有答案和方法!一定要收藏

高中物理最难的部分是什么?对于大多数同学来说&#xff0c;电粒子在电磁场中的运动、动力学分析以及电学实验比较难搞定&#xff0c;看看下面的方法&#xff0c;希望对你有所帮助。从应试而言&#xff0c;应是带电粒子在电磁场中的运动(力&#xff0c;运动轨迹&#xff0c;几何…

矩阵初等变换的计算细节

矩阵初等变换的计算细节&#xff1a; 随便选一行消元&#xff0c;叫做目标行。一般把目标行放到最下面&#xff0c;即运用第一种初等行变换—交换。先用第二种初等行变换&#xff0c;即数乘化简。再用第三种初等行变换&#xff0c;即倍加消&#xff0c;消不掉以后换一行消。 …

【转】分布式websocket服务器

最近在开发一个游戏的客服系统&#xff0c;同一时间咨询问题的玩家多&#xff0c;为了保证服务器高可用&#xff0c;需要利用分布式&#xff0c;另外服务器宕机还需要玩家无感知重连&#xff0c;最关键的一点是如何实现服务器的高扩展性&#xff0c;即性能不足时&#xff0c;如…

【Rational Rose使用笔记】协作图

例题 用例题亲自画一下是最好的。 例题出处&#xff1a;掌握在Rational Rose中绘制协作图&#xff08;交互图&#xff09;的操作方法 其他参考文章&#xff1a; UML–协作图详解UML中创建对象的方法&#xff1a;Rational Rose建立对象图 笔记 以下是总结的一些笔记&#x…

python输入城市名称_python 查询天气(输入城市名,输出天气)

python 查询天气&#xff0c;输入城市名&#xff0c;输出天气def get_whether(city_name):""""""city_code_dict { \北京: 101010100, 上海: 101020100, \天津: 101030100, 重庆: 101040100, \}if len(city_name) 0:print "city name is …

【转】RocketMQ的一些特性(生产者消费者配置参数的含义)

一 nameserver 相对来说&#xff0c;nameserver的稳定性非常高。原因有二&#xff1a; 1 nameserver互相独立&#xff0c;彼此没有通信关系&#xff0c;单台nameserver挂掉&#xff0c;不影响其他nameserver&#xff0c;即使全部挂掉&#xff0c;也不影响业务系统使用&#xff…

【Rational Rose使用笔记】用例图

一 先找例题&#xff1a; 掌握运用Rose工具绘制用例图的基本操作 再学习&#xff1a; UML建模——用例图&#xff08;Use Case Diagram&#xff09; 二 下面是笔记&#xff1a; 了解几种关系&#xff1a;依赖、关联、泛化、包含、扩展。 如何区别依赖、关联&#xff1f; 依…

【转】使用IIS做HTTP和WebSocket服务的反向代理

反向代理对于服务器来说是非常实用的功能&#xff0c;可以将毫不相关的网站部署到同一个域名下&#xff0c;对于使用docker的人来说可以免去大量配置上的麻烦。它还能将HTTP流量转换成HTTPS&#xff0c;多个服务只需要一个证书就能解决。 对于nginx和Apache&#xff0c;网上已…

【OSG】基础知识点合集

三大遍历&#xff1a;更新遍历、拣选遍历、绘制遍历