前言

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

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

  1. 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列。也称为点对点模式
  2. 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式
  3. 发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者。称为发布/订阅模式
  4. 路由模式:在发布/订阅模式的基础上,有选择的接收消息,也就是通过 routing 路由进行匹配条件是否满足接收消息。
  5. 主题模式:同样是在发布/订阅模式的基础上,根据主题匹配进行筛选是否接收消息,比第四类更灵活。
  6. RPC模式:与上面其他5种所不同之处,类模式是拥有请求/回复的。也就是有响应的,上面5种都没有。

接下来几篇文章一起来看看这几种队列模式吧,本篇为简单队列模式。

文章目录

文章目录

  • 前言
  • 文章目录
  • 1 实现功能
  • 2 构建项目
    • 2.1 导入依赖
    • 2.2 封装Connection
  • 3 生产者
  • 4 消费者
  • 5 测试环节
    • 5.1 启动RabbitMQ
    • 5.2 创建vhost
    • 5.3 依次运行Producer\Customer
  • 6 简单队列总结

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

我创建了一个java相关的公众号,用来记录自己的学习之路,感兴趣的小伙伴可以关注一下微信公众号哈:niceyoo

RabbitMQ六种队列模式-简单队列模式相关推荐

  1. RabbitMQ的5种队列_简单队列_入门试炼_第4篇

    Statement 文章目录 一.队列总览 1.1. 图示 1.2. 说明 二.简单队列 2.1. 图示 2.2. 导入RabbitMQ的客户端依赖 2.3. 获取MQ的连接 2.4. 生产者发送消息 ...

  2. 创建型模式 简单工厂模式

    创建型模式 简单工厂模式 /*** 创建型模式 简单工厂模式* 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.** ...

  3. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  4. rabbitmq几种工作模式_RabbitMQ六种队列模式-简单队列模式

    在官网的教程中,描述了如上六类工作队列模式: 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列.也称为点对点模式. 工作模式:一个消息生产者,一个交换器,一个消息队列,多个 ...

  5. 获取rabbitmq连接对象_RabbitMQ——简单队列

    RabbitMQ 简述# RabbitMQ是一个消息代理:它接受并转发消息. 您可以将其视为邮局:当您将要把寄发的邮件投递到邮箱中时,您可以确信Postman 先生最终会将邮件发送给收件人. 在这个比 ...

  6. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

    工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面 ...

  7. JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  8. 工厂模式 java_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  9. java web简单工厂模式_JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

最新文章

  1. 微信小程序 --- 图片自适应、本地图片的使用
  2. opencv光流Optical Flow
  3. hdu2036(多边形面积)
  4. 通过修改Tomcat配置,解决乱码问题
  5. oracle通信通道的文件结尾_申请被拒?被放到WL?没消息?莫着急,这篇文章助您找到argue信的突破口!...
  6. “压扁数组”技巧(flattening the array)
  7. 剑指Offer #05 用两个栈实现队列(模拟)
  8. 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议
  9. java druid sqlite_springboot整合druid抛出dbType not support : sqlite异常
  10. Java并发编程之ThreadGroup
  11. Linux内核开发:内核模块参数
  12. 详解OpenCV中的cvCreateMat()函数
  13. php ci base url,CodeIgniter中base_url问题
  14. java读mysql增量_如何复制行并在MySQL中使用自动增量字段插入同一个表?
  15. 使用Nginx做图片服务器时候,配置之后图片访问一直是 404问题解决
  16. GPS坐标转换(一)-基础知识
  17. Icode编程>>>Python编程>>>1级训练场>>>基础训练【1】
  18. 普通高中信息技术课程标准( 必修 选修科目)
  19. oracle开方怎么写,excel的开方/平方/次方及根号运算
  20. 细说上帝视角游戏的快速创建

热门文章

  1. [css] 怎样把一个div居中?怎样把一个浮动元素居中?怎样把绝对定位的div居中?
  2. 工作336:uni-ele-el-table修改宽度问题
  3. 工作296:el-table使用
  4. 工作163:eachrt修改
  5. 前端学习(1880)vue之电商管理系统电商系统之获取左侧菜单数据
  6. 前端学习(1263):post方式的参数传递
  7. 前端学习(86):标签嵌套规范
  8. 第六十二期:看完这篇还不了解Nginx,那我就哭了!
  9. 第五十期:详解语音识别技术的发展
  10. 第二十七期:德国工业4.0眼里“工业互联网”与“智能制造”