Java 使用RabbitMQ进行RPC风格的通信:模板转换SendAndReceive与推送/订阅风格
我正在使用RabbitMQ实现RPC风格的通信,其思想是创建异步管道体系结构。我正在使用JavaSpring和AMQP 我将执行RPC风格的通信链-与一个服务器的通信将触发另一个服务器,另一个服务器将触发另一个服务器,直到最终到达该链的末端,并且启动该链的服务器接收最终答案。我发现两种技术似乎适合我的需要:Java 使用RabbitMQ进行RPC风格的通信:模板转换SendAndReceive与推送/订阅风格,java,spring,asynchronous,rabbitmq,amqp,Java,Spring,Asynchronous,Rabbitmq,Amqp,我正在使用RabbitMQ实现RPC风格的通信,其思想是创建异步管道体系结构。我正在使用JavaSpring和AMQP 我将执行RPC风格的通信链-与一个服务器的通信将触发另一个服务器,另一个服务器将触发另一个服务器,直到最终到达该链的末端,并且启动该链的服务器接收最终答案。我发现两种技术似乎适合我的需要: asyncRabbitTemplate的convertSendAndReceive(…):使用此方法推送,一旦消费者收到,触发另一个convertSendAndReceive(…),依此类推
asyncRabbitTemplate
的convertSendAndReceive(…)
:使用此方法推送,一旦消费者收到,触发另一个convertSendAndReceive(…)
,依此类推。。。链,直到最终结果在启动整个过程的服务器上结束convertAndSend(…)
进行推送,消费者将通过@RabbitListen
进行监听,并推送到另一个正在监听的用户,依此类推;在此设置中,具有初始convertAndSend(…)
调用的服务器将接收最终响应我不确定这些方法之间的区别是什么?什么时候去买一个或另一个?是否存在性能权衡?一个比另一个需要更多的编程工作吗?我认为这是一个概念上的问题。我手头没有序列图工具,但在RPC中
大多数计算机程序依赖确定性行为,相同的输入总是产生完全相同的输出。这应该是对@theMayer答案的评论。但是,我想用一个图像详细说明RPC的细节@如果你愿意,玩家可以随意嵌入这个图片,然后我会删除这个答案 RPC调用通常按以下方式运行:
据我所知,您正在构建一系列事件,这些事件应该从一开始就结束。RPC模式用于相互了解的两方之间的直接调用
因此,您完全可以选择主题,如果您可以定义每个站点之后数据的转换方式(即金属条->挤压金属条->弯曲金属条->勺子),这将使您能够独立扩展每个站点,甚至可以在不改变任何其他内容的情况下添加监控/响应任何阶段的服务,但是要小心扩展初始呼叫方-您可能需要解决我不确定这是否是一个可以回答的问题,但我只知道2美分-以这种方式链接消息的模式可能会导致糟糕的结果和失望。您需要能够管理整个工作流并重新启动失败的操作。请随意编辑我的答案。这个图表比我可能画的要复杂一些,但它仍然有效。