RPC 模型中的correlationId 和临时队列 - AMQP

2024-02-20

我正在读书RPC模型 http://www.rabbitmq.com/tutorials/tutorial-six-java.html在 AMQP 中使用 RabbitMQ。本教程创建了一个临时队列,并且还correlationId。临时队列是唯一的,那么为什么我们需要correlationId呢?我是一名 JMS 人员,在 JMS 中我们通过两种方式进行请求/响应:

  1. 为每个请求/响应创建临时队列

  2. 创建一个响应队列并使用correlationId和消息选择器。

有人可以解释为什么我们需要临时队列和correlationId在AMQP RPC模型中?看来AMQP没有消息选择器之类的东西。我对吗?


正确的,临时队列对于发出 RPC 请求的客户端来说是唯一的。我们可以创建 RPC 客户端,为它发出的每个唯一请求提供一个唯一的队列,但这效率很低 - 请参阅 CorrelationId 的第一段here http://www.rabbitmq.com/tutorials/tutorial-six-python.html:

在上面介绍的方法中,我们建议为每个 RPC 请求创建一个回调队列。这是相当低效的,但幸运的是有一个更好的方法 - 让我们为每个客户端创建一个回调队列。

因此,更好的方法是使用一个队列,RPC 客户端可以在该队列上获取响应,并使用correlationId 将 RPC 客户端发出的请求与 RPC 服务器发回的结果进行匹配。

...在该队列中收到响应后,尚不清楚该响应属于哪个请求。这就是使用correlation_id属性的时候。我们将为每个请求将其设置为唯一值。稍后,当我们在回调队列中收到消息时,我们将查看此属性,并基于此我们将能够将响应与请求相匹配。如果我们看到未知的correlation_id值,我们可以安全地丢弃该消息——它不属于我们的请求。

因此,请参考RPC教程 http://www.rabbitmq.com/tutorials/tutorial-six-python.html:

  • 当客户端启动时,它会创建一个独占且唯一的队列
  • 当它发送 RPC 请求时,它会设置作为队列名称的reply_to(以便服务器知道将响应发送到哪个队列),并设置一个correlationId,它是每个 RPC 请求的唯一值
  • 请求被发送到RPC队列
  • RPC工作线程(或服务器)接收请求并处理它,然后使用reply_to值将响应发送回客户端,它还设置correlationId
  • RPC 客户端等待响应,当它收到响应时,使用correlationId 来MATCH请求的响应
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RPC 模型中的correlationId 和临时队列 - AMQP 的相关文章

  • 如何在 celery 内为每个用户生成队列?

    因此 我尝试将 Web 请求中的阻塞内容移至后台任务并利用队列 我对消息传递和发布 订阅也很陌生 用户将数据推送到那里并进行处理 稍后用户会收到相关通知 我为此做了一个 celery 设置 发现它不能满足我为每个用户分配自己的任务的专用队列
  • 启动 RPC 服务器时出现“端点重复”

    我的程序使用 Microsoft RPC 进行进程间通信 为了准备接收 RPC 调用 程序运行以下序列 RpcServerUseProtseqEp 然后 RpcServerRegisterIf 则 RpcServerListen 该程序按照
  • 如何禁用 RabbitMQ 默认 tcp 监听端口 - 5672

    我已经配置了RabbitMQrabbitmq config具有新端口号的文件 即带有 SSL 的 5671 现在我想禁用默认端口 即 5672 配置文件如下 rabbit ssl listeners 5671 ssl options cac
  • Hedera 上几乎相同的交易中“gasUsed”值存在巨大差异 - 为什么?

    我注意到所使用的气体量之间存在差异 通过交易几乎是相同的 我正在调用智能合约 连续两次使用相同的参数 两者之间的唯一区别 是我正在设置gasLimit到精确值 由返回eth estimateGas在第一个中 我正在设置gasLimit to
  • 在 Red Hat 上安装 RabbitMQ - 错误的 Erlang 版本

    我正在尝试按照以下说明在 Red Hat Enterprise Linux 7 64 位工作站版本 的评估虚拟机上安装 RabbitMQhttps www rabbitmq com install rpm html https www ra
  • 保持鼠兔 BlockingConnection 存活而不禁用心跳

    我正在使用 pika 0 10 0 和 python 2 7 版本开发 RabbitMQ 消费者 在我的消费者客户端中 我有一个根据输入消息运行一段时间的进程 时间可能从 3 到 40 分钟不等 我不想禁用心跳 相反 我正在寻找一些回滚机制
  • 如何通过RPC监听firestore

    我想听firestore中的实时变化 而且我也只允许使用Go 由于 Firestore SDK for Go 没有任何选项来监听实时更改 因此我决定使用 firestore v1beta1 sdk 我编写了以下代码来做到这一点 func T
  • 谁能告诉我 python 中的 pika 和 kombu 消息传递库有什么区别?

    我想在我的应用程序中使用消息传递库与rabbitmq交互 谁能解释一下 pika 和 kombu 库之间的区别吗 Kombu 和 pika 是两个不同的 Python 库 它们从根本上服务于相同的目的 向消息代理发布消息和使用消息代理发送消
  • 列出与rabbitmq java客户端API交换的绑定

    我似乎在文档中找不到任何信息 所以我想知道是否可以通过某种方式使用 java RabbitMQ API 获取与交换相关的所有绑定 我在查询 api bindings 时正在寻找类似 http api 结果的内容 api definition
  • 死信交换 RabbitMQ 丢弃消息

    我正在尝试在 RabbitMQ 中实现 dlx 队列 场景很简单 我有 2 个队列 1 活着 2 死亡 x dead letter exchange 立即 x message ttl 5000 以及 立即 交换 这必然是 1 活着 我尝试运
  • 如何在Python中使用gRPC处理自定义异常?

    我需要实现自定义异常来使用 Python 处理 gRPC 请求错误 对于 HTTP 请求 它很简单 当出现错误代码等时 请求库可以很好地捕获它 我正在寻找 gRPC 的类似方法来执行以下操作 try send gRPC request ex
  • GWT:在另一个模块内调用RPC服务

    我有一个模块B 它继承了模块A 当我从A内部调用RPC服务时 它们工作正常 但是当我在B中调用A的服务时 RPC调用总是失败 我错过了什么吗 预先感谢您的任何帮助 我在这里找到了我的问题的答案 http blog cloudglow com
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • java.lang.ClassNotFoundException:com.google.gwt.user.client.rpc.RemoteService

    在 Tomcat 6 中部署 war 文件时出现以下异常 java lang ClassNotFoundException com google gwt user client rpc RemoteService 所以我尝试通过 webAp
  • 即使设置了 cookie,RabbitMQ 身份验证也会失败

    我最近在运行 lattePanda 的 Windows 10 上安装了带有 ErlanOTP 的rabbitmq 我运行rabbitmqctl status并收到以下错误 C Program Files RabbitMQ Server ra
  • 同步 gRPC 客户端同步/异步服务器

    我只是好奇 异步 gRPC 服务器是否支持多个客户端的连接 如果不是 异步的可以吗 以及异步服务器 同步客户端的组合 甚至可能吗 是的 同步 gRPC 支持开箱即用的多个连接客户端 我亲自测试了多达 2000 个同时连接的客户端到一个用 G
  • AMQP 消息的版本控制

    是否有关于在 AMQP 中使用版本化消息的既定最佳实践 假设我正在对消息模式进行语义版本控制 我希望支持消息的当前主要版本以及以前的主要版本 这是一个现实的期望吗 处理版本化消息的不同选项有何优缺点 我已经看到版本化路由密钥和版本消息头作为
  • Erl 无法连接到本地 EPMD。为什么?

    Erlang R14B04 erts 5 8 5 source 64 bit rq 1 async threads 0 kernel poll false Eshell V5 8 5 abort with G root ip 10 101
  • AMQPRuntimeException:读取数据时出错。收到 0 而不是预期的 7 字节

    它曾经有效 但现在不再有效了 我正在使用 php amqplib 和 RabbitMQ 当我尝试创建新的 AMQP 连接时 connection new AMQPConnection localhost 5672 username pass
  • RabbitMQ - 如何死信/处理过期队列中的消息?

    我有一个队列x expires放 我遇到的问题是我需要对队列中的消息进行进一步处理IF队列过期 我最初的想法是设置x dead letter exchange在队列中 但是 当队列过期时 消息就会消失而不会进入死信交换 如何处理死信或以其他

随机推荐

  • Node js 中的 Values 文件上传器 - 多个文件上传

    我在用着值 ajax 文件上传器 http valums com ajax upload 我的nodejs服务器端如下所示 fileStream fs createWriteStream dirname public images hous
  • 为 Scala 枚举导出 Cats 顺序

    我想要一只普通的猫Order对于斯卡拉的Enumeration 我试过 implicit def enumOrder E lt Enumeration V lt E Value cats Order V new cats Order V d
  • 在discord.py中调用on_member_update时如何访问member?

    我正在尝试创建一个不和谐的机器人 一旦成员离线 不可见 该机器人就会为该成员添加特定的角色 这是我的代码 bot event async def on member update before after if str before sta
  • 如何防止用户关闭我的 C# 应用程序?

    如何用C 制作非封闭的应用程序 我想禁用表单的 X 按钮并防止 Windows 任务管理器关闭它 我知道防止表单关闭的一种方法是处理FormClosing事件 但如何防止任务管理器关闭它 不 无法阻止任务管理器关闭您的应用程序 任务管理器可
  • 在可可中处理来自 MIDIReadProc 的传入 MIDI 信号的最佳策略

    我必须移动一些NSSlider通过硬件MIDI控制器 我编写了一个MIDI学习程序来将硬件光标分配给NSSlider 的子类 上面就没有问题了 里面MIDIReadProc 我负责移动NSSlider这取决于传入的控制和值 但现在当我移动硬
  • 为了使其在共享主机上的中等信任下运行,需要避免在 ASP.NET 应用程序中进行编码的最常见、最典型的事情是什么?

    Medium Trust 阻止您做哪些事情 例如 我已经了解到 Medium Trust 会阻止您使用 System IO Path GetTempPath 还有哪些类似的事情 以下是如何了解和解决信任问题 1 在 Windows Micr
  • CLion 构建依赖目标

    我的 CLions CMakeLists txt 包含超过 1 个目标 库和依赖的可执行文件 如何配置一键构建所有目标 而不是一一选择目标并构建它们 例如 在 Visual Studio 中 我可以配置项目依赖项并构建所有解决方案 CLio
  • JQuery - 设置 TBODY

    我有一个表定义如下 table cellpadding 0 cellspacing 0 thead tr th Date th th First Name th th Last Name th tr thead tbody tbody ta
  • Webpack 2:无法解析模块

    我有一个这样的项目 root webpack config js app app js js dep js core module js 这是 webpack 配置文件 module exports entry app app js out
  • Nestjs 与 Plain Express 性能对比

    我刚刚测试了一个简单的 Nest 控制器的性能 该控制器在 get 请求上返回文本 无数据库 以及与 Express 相同的简单 GET 控制器 中间件 我使用WRK工具来测试性能 因此 plain express 的速度比 Nestjs
  • 如何修复 Microsoft Edge 中不显示的 Web 组件

    我正在尝试 lit element 在 Chrome 和 Firefox 等浏览器上一切都很顺利 但当我尝试 Microsoft Edge 和 IE11 时遇到了问题 在 Chrome 和 Firefox 中显示的 Web 组件在 Micr
  • 如何将犰狳矩阵转换为向量的向量?

    我创建了一个犰狳 C 矩阵 如下所示 arma mat A A zeros 3 4 我想将其转换为由定义的向量组成的向量 std vector lt std vector
  • 安装我的 nuget 包后执行操作

    我们创建了很多 NuGet 包 其中一个是一个工具 它包含一个特殊的编译器 它的安装就像一个dotnet tool 命令的名称是 PolyGen 我们使用了类似的机制Grpc Tools使用 这意味着我们已经在 NugetPackage 中
  • 让 vim 修改文件而不是移动新版本?

    我希望我的应用程序在保存文件时自动更新 因此 我使用inotify ubuntu 来创建检测事件的观察者 问题是vim覆盖文件而不是更新它 所以我的观察者在第一次更新后就丢失了 我想知道 有没有办法设置 vim 使其不使用交换文件并直接更新
  • 如何为asp.net web api编写集成测试

    我正忙着用 asp net web api 设计一个 web 服务 我想开始对每个控制器进行单元测试 到目前为止 这是我的测试课 TestClass public class MyDevicesControllerTest TestMeth
  • mpdf 忽略 javascript

    我在这里有一个问题 我已经使用缓冲来使用 mpdf 获取 pdf 文件 但我在这里有点困惑 我正在缓冲的页面上有一些 javascript 但是从 javascript 生成的内容没有转换为 pdf 让我说清楚 假设我有这个元素 div d
  • ios 访问主窗口或视图

    我想知道是否有一种简单的方法可以访问 IOS 中的主窗口或视图 类似于 UIScreen mainScreen 谢谢 Try UIWindow frontWindow UIApplication sharedApplication wind
  • 如何使用 1 个 mySQL 查询返回所有结果的数值箱线图数据?

    tbl votes id item id vote 当然 我们可以通过以下方式解决这个问题 the smallest observation so the lower quartile lq the median me the upper
  • 通过 Swift 设置 ARKit 方向

    我正在开发一个 ARKit 应用程序OpenGL 因此直接使用 ARKit 而不是使用 SceneKit 默认情况下 ARKit 设置为横向 但我无法找到任何旋转为纵向的文档或示例 SceneKit 示例适用于纵向 但Metal示例仅适用于
  • RPC 模型中的correlationId 和临时队列 - AMQP

    我正在读书RPC模型 http www rabbitmq com tutorials tutorial six java html在 AMQP 中使用 RabbitMQ 本教程创建了一个临时队列 并且还correlationId 临时队列是