RabbitMQ简单演示发布订阅模式

RabbitMQ七种工作模式 概念 RabbitMQ的一个消息代理:它接受并转发消息。 你可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里。在这个例子中,RabbitMQ就相当于投递箱、邮局和邮递员。 AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到对队列中,只是将消息发送到一个交... 阅读详情

发布订阅模式用到了交换机,消息不再直接发送给队列了,其实消息本来也没直接发送给队列,在工作队列和简单的HelloWorld代码里,我们其实发送至的是一个默认交换机。而发布订阅模式需要自己定义一个交换机。

将消息发送给交换机,再由交换机的类型分发给队列。发布订阅模式中交换机的类型是BuiltinExchangeType.FANOUT,即“fanout”。


话不多说,代码,上!

public class SendMessage {

    private static final ConnectionFactory factory = new ConnectionFactory();

    private static Connection connectionStatic = null;

    static {
        factory.setHost("49.232.202.201");
        factory.setUsername("gosuncn");
        factory.setPassword("123456");
        factory.setVirtualHost("/gosuncn");
        try {
            connectionStatic = factory.newConnection();
        } catch (IOException | TimeoutException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try (Connection connection = connectionStatic; Channel channel = connection.createChannel()) {
            channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
            channel.basicPublish(Constant.EXCHANGE_NAME, "", null, ("FANOUT").getBytes());
            System.out.println("消息已发送至交换机");
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

这是发送消息的程序代码,可以看出channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.FANOUT);声明了一个FANOUT类型交换机。还给交换机起了个名字,叫Constant.EXCHANGE_NAME常量对应的值。

之前,我们发送消息,是这样发:channel.basicPublish("", QUEUE_NAME, null, MESSAGE.getBytes());将消息发送给" "默认交换机(类型是直连交换机DIRECT("direct")),再由默认交换机发送给QUEUE_NAME队列,其实第二个参数是路由键,并不是队列的名字。由于直连交换机的特点就是根据路由键去寻找和路由键相同名称的队列,所以我们也可以理解为队列名。

而发布订阅模式,channel.basicPublish(Constant.EXCHANGE_NAME, "", null, ("FANOUT").getBytes());指:我们不再发送给默认交换机了,而是发给名为Constant.EXCHANGE_NAME常量值的交换机,路由键为空,由于该交换机是FANOUT类型交换机,凡是收到消息就会把消息分发给所有绑定的队列,所以起到了一个发布订阅的功能。

来看下消费者的代码:

public static void main(String[] args) throws IOException {
    Channel channel = connection.createChannel();
    channel.exchangeDeclare(Constant.EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, Constant.EXCHANGE_NAME, "");
    channel.basicConsume(queueName, true, (consumerTag, message) -> {
        System.out.println("DeliverCallback's consumerTag is {" + consumerTag + "}");
        System.out.println("消费消息的内容 = " + new String(message.getBody()));
    }, consumerTag -> System.out.println("CancelCallback's consumerTag is {" + consumerTag + "}"));
}

String queueName = channel.queueDeclare().getQueue(); 声明了一个默认的队列。

通过channel.queueBind(queueName, Constant.EXCHANGE_NAME, "")将队列绑定到交换机。这样,交换机收到消息就会分发给绑定的queueName队列。任何与交换机EXCHANGE_NAME绑定的(FANOUT类型)队列都会收到消息放入队列。

RabbitMQ练习(Publish/Subscribe) 将把同一个消息传递给多个消费者,这种模式被称为"发布/订阅"(publish/subscribe)模式。下面是对这个概念的解读:发布/订阅模式:这是一种消息通信模式,其中消息的发布者(发布者)不会将消息直接发送给特定的接收者(订阅者)。相反,消息会被发布到一个主题(topic)或频道(channel),任何对该主题或频道感兴趣的接收者都可以接收到消息。发布者(Publisher):发布者是发送消息的实体。它不关心谁将接收消息,只是将消息发布到一个公共的频道或主题。订阅者(Subscriber) 阅读详情

相关推荐

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 256

RabbitMQ发布/订阅(交换机)

RabbitMQ发布/订阅(交换机)

m0_72720243的博客 619

SwarmClaw:自托管多智能体AI运行时部署与实战指南

多智能体系统是人工智能领域的重要发展方向,它通过多个具备自主决策和协作能力的智能体共同完成任务,其核心原理在于分布式问题求解与协同规划。这种架构在提升任务处理效率、复杂问题分解和鲁棒性方面具有显著技术价值,广泛应用于自动化工作流、虚拟团队协作、智能客服和个性化助手等场景。本文聚焦于SwarmClaw这一自托管的多智能体AI运行时,它原生支持Model Context Protocol,并内置了超过23种AI提供商,为开发者提供了一个开箱即用且高度可定制的控制平面,便于构建和管理复杂的多智能体协作网络。

weixin_27207591的博客 401

【RabbitMQ四】——RabbitMQ发布订阅模式(Publish/Subscribe)

通过本篇博客能够简单使用RabbitMQ的发布订阅模式。本篇博客主要是博主通过官网以及学习他人的博客总结出的RabbitMQ发布订阅模式。其中如果有误欢迎大家及时指正。

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 6200

STM32F407与AD7766实战:如何用SPI+DMA实现高速ADC数据采集(附完整代码)

本文详细介绍了如何利用STM32F407的SPI接口与DMA控制器,高效稳定地驱动24位高精度ADC芯片AD7766,实现高速连续数据采集。通过对比传统中断方式的瓶颈,阐述了SPI+DMA方案如何大幅降低CPU负载,并提供了从硬件设计、CubeMX配置到核心驱动代码的完整实战指南,帮助工程师解决高速ADC数据采集中的性能难题。

weixin_29281941的博客 187

ADS AEL脚本进阶:参数化电感与变压器的自动化设计

本文深入探讨了如何利用ADS AEL脚本实现电感与变压器的参数化与自动化设计。通过构建可复用的函数库、封装高级设计流程、集成DRC检查与性能预估,将繁琐的手动绘制升级为高效的智能设计引擎,并最终通过创建GUI工具降低使用门槛,大幅提升射频/微波电路设计效率。

weixin_29309785的博客 203

RabbitMQ:发布订阅模式

P:生产者,发送消息给交换机C:消费者,接收消息X:交换机,一方面接收生产者发送的消息,另一方面知道怎么处理消息,是否应将其附加到特定队列?是否应将其附加到多个队列中?或者它应该被丢弃。其规则由交换类型定义。Queue:消息队列,接收消息,缓存消息每个消费者都监听自己的队列生产者把消息发送给broker,然后交换机把消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收到消息。

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 4256

超声信号处理——硬件电路中的混频应用

本文介绍了超声多普勒系统的信号处理原理。系统通过波形振荡器产生高频信号,经换能器转换为超声波发射,接收反射信号后与原始信号混频,利用三角函数的积化和差特性产生包含多普勒频移的低频差频信号和高频和频信号。通过低通滤波器滤除高频成分后,即可获得纯净的多普勒信号。这种处理方法将MHz级高频信号转换为可听低频信号,降低了系统复杂度与成本。数学推导表明,差频信号频率正好

fcxgfdjy的博客 1123

RabbitMQ系列学习笔记(八)--发布订阅模式

本文介绍了RabbitMQ的发布订阅模式,为作者在学习RabbitMQ时的笔记,特此记录,以便后续学习中能够查漏补缺。

Scr1Pt的博客 2930

如何查看在电脑里登陆过的微信帐号的聊天记录

打开微信电脑版,点击左下角 "≡" 菜单 → 选择 "设置"进入 "账号与存储"(旧版为" 文件管理 ")选项卡在 "存储位置"一栏查看当前实际保存路径,可点击" 打开文件夹 " 直接访问查看电脑里登录过的微信账号聊天记录,首选官方客户端直接登录查看,操作简单且安全;若账号已退出,可通过备份恢复功能处理;仅需查看媒体文件时,可定位到FileStorage 文件夹直接访问。无论哪种方式,都需遵守隐私保护原则,并注意聊天记录的加密特性限制。

捷利迅分享的博客 4538

【系统架构设计师】论文:论虚拟现实技术的应用与发展

虚拟现实技术是当前科学研究的热点,同时也是国家大力支持发展的核心技术之一。所谓虚拟现实,就是通过计算机等虚拟手段来构造一个非常接近真实世界的虚拟环境,它主要体现在视觉、触觉、嗅觉等方面的逼真模拟来达到高度的沉浸性,也就是如我们通常所说的“身临其境”。

数据知道的博客 1万+

RabbitMQ入门案例之发布订阅模式

RabbitMQ中的发布与订阅模式是一种消息传递的方式,用于在分布式系统中传递消息。在该模式中,发送者(发布者)通过将消息发送到一个称为Exchange(交换机)的组件,消息将被路由到一个或多个称为Queue(队列)的组件。每个队列都有一个名称和一组绑定(bindings),指定接收哪些消息。消费者(订阅者)可以在指定的队列上进行侦听,以获取消息。该模式的一个重要特点是支持多个消费者接收相同的消息,通过使用多个队列和绑定实现。

weixin_59216829的博客 3782

第110章 PCL PointCloudFusing 点云融合重建详细讲解

点云融合是指将多个不同视角、不同位置、不同传感器获取的点云数据进行合并,得到一个更加完整、准确的三维模型。多视角扫描:从多个相机或传感器获取点云数据,需要将这些数据融合成一个统一的三维模型。传感器融合:例如将激光雷达(LiDAR)点云与相机的图像数据融合,以便获得更高质量的三维重建。动态场景重建:动态环境中的物体,点云数据不断更新,如何平滑地融合这些点云是一个重要课题。点云融合的目标是将不同来源的点云数据准确地合并,消除冗余,减少噪声,并提高整体的点云密度和精度。

yumeiguo的博客 501

RabbitMQ使用教程

RabbitMQ使用教程,一文解决入门难题

Mr. Wu's blog 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RabbitMQ

文章目录RabbitMQ 使用场景服务解耦流量削峰异步调用rabbitmq 基本概念ExchangeMessage QueueBinding KeyRouting Keyrabbitmq安装安装erlang语言库rabbitmq官方精简的Erlang语言包下载和安装安装socat依赖socat依赖包下载和安装安装rabbitmqrabbitmq安装包下载和安装rabbitmq启动和停止命令rabb...

wanght笔记 10万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Rabbit详解(简单、工作、发布订阅、Routing路由、通配模式详解)springboot工程改造

准备工作 既然要说rabbitmq,那肯定首先要安装上了! 安装rabbitmq教程 一、消息队列概述 消息队列MQ MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。 为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。 开发中消息队列通常有如下应用场景: 任务异步处理 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程

qq_48033003的博客 1192

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

RabbitMQ教程完整(精华干货)

RabbitMQ教程(完整!!!) 一.RabbitMQ安装 1.1 为什么使用RabbitMQ 1.降低耦合度 2.RabbitMQ速度快,微秒级别 3.学习成本低 4.支持多种语言 1.2 什么是RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议)的开源实现 能够实现异步消息处理 1.3 安装RabbitMQ #在线安装 docker pull rabbitmq:management #使用官方定义的端口号启动 d

qq_45472675的博客 2万+

RabbitMQ的六种工作模式以及代码实现。

一、什么是RabbitMQ rabbitmq是基于amqp协议实现一套高效的数据传输组件,MQ(消息队列)。 常见的MQ:ActiveMQ、Kafka、RocketMQ、RabbitMQ 参考网址: RabbitMQ的应用场景以及基本原理介绍 RabbitMQ使用详解 RabbitMQ的Java应用(1) – Rabbit Java Client使用 二、MQ的应用场景 1、消息异步通知(注册时邮箱认证、添加商品生成详情页和将商品添加到搜索库等) 2、消息顺序处理 3、消息延迟处理 4、请求削峰 三,Rab

u010797364的博客 1144

rabbitmq 7种队列实现java版

文章目录搭建maven项目引入依赖创建连接简单队列消息生产者消息消费者 搭建maven项目 引入依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.8.0</...

刘本龙的专栏 1391

python 之 rabbmitMQ 简单模式、发布订阅模式(fanout、direct、topic、headers)、应答与持久化

发送端 import pika 输入普通凭据(登录用户名和密码) credentials = pika.PlainCredentials('zhangsan', '1qaz2wsx') 输入连接参数(阻塞连接) connection = pika.BlockingConnection( pika.ConnectionParameters('192.168.56.1', credentials=credentials) ) 建立rabbit协议链接的通道 channel = connection

风华浪浪的博客 1247

消息中间件 - RabbitMQ 六种模式

官网链接 简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,RPC远程调用模式(远程调用,不太算MQ;不作介绍); 第一、简单模式(Simple) public class SimpleProducer { String SIMPLE_QUEUE_NAME = "hello"; public static void main(String[] args) throws Exception { Conne

DJun的博客 1121

五阶段--消息服务、消息中间件(broker)、消息队列/rabbitmq的使用场景/六种工作模式

一消息服务、消息中间件(broker)、消息队列 1搭建 Docker 环境 克隆 centos-8 或 centos-7: docker-base 设置ip ./ip-static ip: 192.168.64.150 ​ ifconfig 注意:若这里出现error,需要使用这两个命令,再重新设置ip nmcli n on systemctl restart NetworkManager 3.安装 docker,参考csdn笔记:Docker(一) -...

weixin_58580280的博客 1859

RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)

点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天 8:55 更新文章,每天掉亿点点头发...源码精品专栏原创 | Java 2020 超神之路,很肝~中...

芋艿V 113

RabbitMQ消息中间件

MQ全称(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。思考:原来服务与服务之间如何通信?Openfeign 服务与服务之间直接调用。我们也可以使用MQ完成系统与系统之间得调用。rabbit的工作原理>1.Producer:生产者【生产消息】>2. Consumer:消费者(从队列中获取消息)>2. Connection:连接通道【生产者和消费者和Rabbit服务连接】

qq_50896786的博客 1649

RabbitMQ的简单使用

MQ 的简单使用

qq_50846224的博客 315

RabbitMQ学习简单笔记

一、消息队列的应用场景 消息队列是改变了服务之间调用的通信方式,使用消息队列可以极大的提供业务代码所花费的时间,在很多场景下,消息队列是非常好用的! 当前消息队列中间件的介绍 1)Kafka 适用于大数量,对功能要求不高的应用场景 2)RabbitMQ 适用于功能要求高、而且还注重公平调度原则的应用场景 什么是公平调度: 比如多条线程之间,可以非常公平的进行切换: A B A B… 3)没有中转...

a_1212_a 324
上一篇: RabbitMQ工作队列模式
下一篇: RabbitMQ简单演示直连(路由)模式
盖了帽
博客等级 码龄8年 17粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值