总结Rabbitmq的六种模式

news2025/1/12 1:56:40

RabbitMQ六种工作模式

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ有六种模式

  • 简单模式
  • work模式
  • Publish/Subscribe发布与订阅模式
  • Routing路由模式
  • Topics主题模式
  • RPC远程调用模式(远程调用,不太算MQ;暂不作介绍)

 

相关概念介绍

AMQP 一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

RabbitMQ是AMQP协议的Erlang的实现。

概念说明
连接Connection一个网络连接,比如TCP/IP套接字连接。
信道Channel多路复用连接中的一条独立的双向数据流通道。为会话提供物理传输介质。
客户端ClientAMQP连接或者会话的发起者。AMQP是非对称的,客户端生产和消费消息,服务器存储和路由这些消息。
服务节点Broker消息中间件的服务节点;一般情况下可以将一个RabbitMQ Broker看作一台RabbitMQ 服务器。
端点AMQP对话的任意一方。一个AMQP连接包括两个端点(一个是客户端,一个是服务器)。
消费者Consumer一个从消息队列里请求消息的客户端程序。
生产者Producer一个向交换机发布消息的客户端应用程序。

准备工作

导入相关依赖

  <dependency>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>

在你的application中添加以下代码(根据自己的实际情况修改)

spring:
  rabbitmq:
    host: 192.168.67.129
    port: 5672
    username: admin
    password: 123

创建配置类

  @Bean
    public Jackson2JsonMessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setConnectionFactory(connectionFactory);
        rabbitTemplate.setMessageConverter(messageConverter());
        return rabbitTemplate;
    }

创建枚举类RabblimqConstants 创建常量

public interface RabblimqConstants {

    String SIMPLE_QUEUE = "hello_queue_new";//点对点常量

    String WORK_QUEUE = "my_work_queue"; //工作模式

    //路由模式
    String PUBLISHER_A = "publisher_quque_a";
    String PUBLISHER_B = "publisher_quque_b";
    String PUBLISHER_EXCHANGE = "my.exchange";


    //创建两个队列
    String FANOUT_QUEUE_A = "fanout_queue_a";
    String FANOUT_QUEUE_B = "fanout_queue_b";


    //创建交换机 广播模式
    String FANOUT_EXCHANGE = "my.fanout_exchange";


    //rounting交换机
    String ROUTING_QUEUE_ORANGE = "my_routing_queue_orange";

    String ROUTING_QUEUE_BLACK = "my_routing_queue_black";
    String ROUTING_QUEUE_GRENN = "my_routing_queue_green";

    String ROUTING_EXCHANGE = "my.routing_exchange";

    //定义rounting key
    String ROUNTING_KEY_ORANGE = "orange";
    String ROUNTING_KEY_BLACK = "black";
    String ROUNTING_KEY_GREEN = "green";


    //topic模式

    String TOPIC_QUEUE_RED = "my_topic_queue_red";

    String TOPIC_QUEUE_WHITE = "my_topic_queue_white";

    String TOPIC_EXCHANGE = "my.topic.exchange";

    String TOPIC_KEY_RED = "red.#";

    String TOPIC_KEY_WHITE = "*.white.#";


    String NORMAL_QUEUE = "normal_queue";//正常队列

    String NORMAL_EXCHANGE = "normal_exchange";//正常交换机

    String NORMAL_ROUNTING_KEY = "normal_routingkey"; //正常的key

    String DL_QUEUE = "dl_queue";//死信队列

    String DL_EXCHANGE = "dl_exchange";//死信交换机

    String DL_ROUNTING_KEY = "dl_routingkey"; //死信key

    //插件完成死信队列
    String SDL_QUEUE = "sdl_queue";

    String SDL_EXCHANGE = "sdl_exchange";

    String SDL_ROUNTING_KEY = "sdl_routingkey";

    String SDL_EXCHANGE_TYPE = "x-delayed-message";



}

详细介绍

Hello World简单消息模式

模式说明

在上图的模型中,有以下概念:

  • P:生产者,也就是要发送消息的程序
  • C:消费者:消息的接受者,会一直等待消息到来。
  • queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。

Work queues工作队列模式

Work Queues与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。

工作队列模式实际上是一种竞争关系的模式,多个消费者之间是竞争关系,即一条消息如果被某个消费者消费了,那么其他的消费者就获取不到了。

Publish/Subscribe发布与订阅模式

发布订阅模式:

  • 1、每个消费者监听自己的队列。
  • 2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息

Routing路由模式

模式说明
路由模式特点:

队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey。
Exchange 不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key 完全一致,才会接收到消息

 

P:生产者,向Exchange发送消息,发送消息时,会指定一个routing key。
X:Exchange(交换机),接收生产者的消息,然后把消息递交给 与routing key完全匹配的队列
C1:消费者,其所在队列指定了需要routing key 为 error 的消息
C2:消费者,其所在队列指定了需要routing key 为 info、error、warning 的消息

Topics主题模式

模式说明
Topic主题模式也叫通配符模式。Topic类型与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!

Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert

通配符规则:

#:匹配零个或多个词

*:匹配不多不少恰好1个词

举例:

item.#:能够匹配item.insert.abc 或者 item.insert

item.*:只能匹配item.insert

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

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

相关文章

请介绍一下美国德克萨斯州历史地理与环境经济文化与社会教育与科研结论请介绍一下罗格斯大学(Rutgers University)校园与分校学术项目研究与创新学

目录 请介绍一下美国德克萨斯州 历史 地理与环境 经济 文化与社会 教育与科研 结论 请介绍一下罗格斯大学&#xff08;Rutgers University&#xff09; 校园与分校 学术项目 研究与创新 学生生活 社会贡献 请介绍一下德州A&M大学系统 组成成员 教育与研究 …

板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第六节 HttpSession对象全解 一、什么是HttpSessionSession的本质 二、创建Seesion及常用方法三、Session域对象四、Session对象的销毁 在上一节中&#xff0c;我们学习了Servlet五大对象里的第三个Cookie对象&#xff0c;但Cookie是有大小限制和…

关于开放系统互联的一些笔记

最近几天就发几篇计算机方面的基础知识 属于个人归纳整理&#xff0c;便于理解希望对大家有帮助 原文地址&#xff1a;关于开放系统互联的一些笔记 - Pleasure的博客 下面是正文内容&#xff1a; 前言 最近在恶补一些计算机方面的基础知识…… 正文 首先为了能够更透彻的理…

VSCode C/C++无法跳转到定义(又是你 clangd !)

原博客&#xff1a;VSCode C/C无法跳转到定义、自动补全、悬停提示功能_c/c:edit configurations(json)-CSDN博客 我在此基础上加一点&#xff1a; 首先确保自己有这个插件&#xff1a; 点击 齿轮⚙ 符号&#xff0c;进入 配置设置&#xff0c;找到 把 C_cpp : Intelli Sens…

【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新)

文章目录 一、前言二、ShaderGraph1.什么是ShaderGraph2.在使用ShaderGraph时需要注意以下几点&#xff1a;3.优势4.项目 三、实例效果边缘发光进阶&#xff1a;带方向的菲涅尔边缘光效果裁剪进阶 带边缘色的裁剪溶解进阶 带边缘色溶解卡通阴影水波纹积雪效果不锈钢效果、冰晶效…

AR智能眼镜主板硬件设计_AR眼镜光学方案

AR眼镜凭借其通过导航、游戏、聊天、翻译、音乐、电影和拍照等交互方式&#xff0c;将现实与虚拟进行无缝融合的特点&#xff0c;实现了更加沉浸式的体验。然而&#xff0c;要让AR眼镜真正成为便捷实用的智能设备&#xff0c;需要解决一系列技术难题&#xff0c;如显示、散热、…

钉钉小程序无法关联应用

钉钉小程序无法关联应用 problem 后台创建了新的应用钉钉小程序开发者工具>企业内部应用>关联应用 没有下拉列表 无法关联&#xff0c;只能点击新增按钮&#xff0c;重新进入后台很奇怪&#xff0c;明明创建好了应用&#xff0c;为什么关联下拉列表没有这个应用呢&…

在VS里使用C#制作窗口应用

新建项目 创建项目的时候搜索net&#xff0c;选择这个。 打开应该是这样 第一个控件 选择公共控件 - PictureBox - 拖入Form 在Image处选择上传本地资源&#xff0c;建议上传一个小一点的图片。 修改一下尺寸。 ctrls 保存 从“属性”切换到“事件” 双击Click事件…

STM32-开发工具

开发过程中可能用到的工具 1、烧录下载调试工具ST-LINK ST-LINK&#xff0c;是ST(意法半导体)推出的调试编程工具&#xff0c;适用于STM32系列芯片的USB接口的下载及在线仿真器。 2、串口调试工具/串口下载工具 串口调试工具是一种用于通过串口通信协议与目标设备进行数据交…

Linux——进程替换

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、进程程序替换1、替换原理2、替换函数3、函数解释4、命名理解 二、用例测试1、execl测试2、…

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023

基于多种机器学习模型的西北地区蒸散发模拟与趋势分析_季鹏_2023 摘要关键词 1 资料和方法1. 1 研究区域与观测数据1. 2 机器学习模型构建与验证方法1. 3 SHAP 可解释性方法 2 主要结果2. 1 不同模型的模拟性能和泛化能力2. 2 不同模型的可解释性分析2. 3 5 km 分辨率格点蒸散发…

长短期记忆神经网络

目录 LSTM 神经网络架构 分类 LSTM 网络 回归 LSTM 网络 视频分类网络 更深的 LSTM 网络 网络层 分类、预测和预报 序列填充、截断和拆分 按长度对序列排序 填充序列 截断序列 拆分序列 指定填充方向 归一化序列数据 无法放入内存的数据 可视化 LSTM 层架构 …

【Flink状态管理五】Checkpoint的设计与实现

文章目录 1. Checkpoint的整体设计2. Checkpoint创建源码解析2.1. DefaultExecutionGraphBuilder.buildGraph2.2. ExecutionGraph.enableCheckpointing 由于系统原因导致Flink作业无法正常运行的情况非常多&#xff0c;且很多时候都是无法避免的。对于Flink集群来讲&#xff0c…

构造函数,原型,实例,类的关系整理

视频来源js原型链、构造函数和类_哔哩哔哩_bilibili 如视频所说&#xff0c;构造函数的prototype指向原型&#xff0c;实例化的对象的__proto__指向原型&#xff0c;原型通过constructor指向构造函数&#xff0c;正如class里面的constructor方法就相当于Person构造函数一样&am…

阿里云 OSS

阿里云对象存储服务&#xff08;Object Storage Service&#xff0c;简称 OSS&#xff09; OSS 为 Object Storage Service&#xff0c;即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口&#xff0c;可以在任…

网关服务gateway注册Consul时报错Consul service ids must not be empty

网关服务gateway启动时&#xff0c;初始化Consul相关配置时报错。 Consul service ids must not be empty, must start with a letter, end with a letter or digit, and have as interior characters only letters, digits, and hyphen: cbda-server-gateway:10.111.236.142:…

VSCode使用Remote-SSH连接服务器时报错:启动服务器失败问题

VSCode使用Remote-SSH连接服务器时报错&#xff1a;启动服务器失败问题 问题描述解决方法引用 问题描述 第一天上班&#xff0c;回来发现又不能使用VScode连不上服务器了&#xff0c;在「输出」栏出现了一直报 Waiting for server log… 的情况&#xff01;本来以为是普通的连接…

【毕业设计推荐】基于MATLAB的水果分级系统设计与实现

一、课题介绍 现在商业行为中&#xff0c;在水果出厂前都需要进行质量检测&#xff0c;需要将不同等级的水果进行分级包装&#xff0c;以保证商业利益最大化。可是传统方法都是依靠人工进行检测&#xff0c;效率低下&#xff0c;主观成分大&#xff0c;并不能很好客观地评价出货…

c++:蓝桥杯中的基础算法1(枚举,双指针)

枚举 基础概念&#xff1a; 枚举&#xff08;Enum&#xff09;是一种用户定义的数据类型&#xff0c;用于定义一个有限集合的命名常量。在C中&#xff0c;枚举类型可以通过关键字enum来定义。 下面是一个简单的枚举类型的定义示例&#xff1a; #include <iostream>enum…

Kalman滤波器的原理及Matlab代码实例

Kalman滤波是一种用于估计系统状态的优秀滤波方法&#xff0c;特别适用于具有噪声的测量数据的情况。它的主要应用包括导航、目标跟踪、信号处理、机器人技术等领域。Kalman滤波器通过融合系统模型和实际测量数据&#xff0c;提供对系统状态的最优估计。 Kalman滤波器的原理基…