响应消息传递

kb5ga3dv  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(366)

我正在调查Kafka9作为一个爱好项目,并完成了一些“你好世界”类型的例子。
我必须考虑现实世界中基于请求-响应消息传递的kafka应用程序,更具体地说,如何将kafka请求消息链接到其响应消息。
我在考虑使用生成的uuid作为请求消息键,并使用此请求uuid作为关联的响应消息键。与webspheremq具有消息关联id的机制类型大致相同。
我的结束2结束过程是。
1). kafka客户机生成一个随机uuid并发送单个kafka请求消息。2). 服务器将使用此请求消息(提取并存储请求uuid值3)。使用消息负载完成业务流程。4). 使用响应消息进行响应,该消息使用请求消息中存储的uuid值作为响应消息键。5). kafka客户机轮询响应主题,直到它超时或检索到具有原始请求uuid值的消息。
我所关心的是,kafka消费者轮询将从响应主题中删除其他客户机消息,并增加使其他客户机失败的偏移量。
我是不是在尝试将Kafka应用到一个从未设计过的用例中?
是否可以在kafka中实现请求/响应消息传递?

gkn4icbw

gkn4icbw1#

我从未尝试过,但从理论上讲,如果您在开始任何product之前,从answer topic生成一些带有数字(从0到分区数)的消息,并且您的producer已经是该主题的使用者,那么每个producer都至少会收到其中一条消息。所以您可以将该密钥存储在每个生产者上,并使用 uuid ... 在对消费者进行处理之后,它可以用 uuid 和发送的密钥相同,所以它将由发送它的同一个生产者获得。。。一旦具有相同密钥的所有消息在同一分区中发布。。。

alen0pnh

alen0pnh2#

更容易的!您只能在zookeeper上写uuidx应该在分区y上应答,并使发送该uuid的生产者使用分区y。。。这有道理吗?

k2fxgqgv

k2fxgqgv3#

我认为您需要调用请求的服务的一个定义良好的shard密钥。您的请求应该包含这个shard键和发布响应的主题的名称。此外,你应该创建某种状态机,当一个关于你的任务的消息出现时,你会转换到某种状态。。。这将是严格的异步设计

lsmepo6l

lsmepo6l4#

尽管kafka提供了方便的方法来为给定的消费群体持久化提交的偏移量,但是您不需要使用这种行为,如果需要的话,您可以编写自己的行为。即便如此,您描述的kafka的使用方式对于用例来说还是有点尴尬,因为每个客户机都需要反复搜索主题以获得特定的响应。那充其量是低效的。
您可以将问题分为两部分,继续使用kafka将请求和响应传递到服务器。您需要添加的惟一一个部分是与您的客户机对话的某种api层,它封装了来自您的客户机的kafka特定逻辑。这一层需要一个本地数据库(关系数据库或nosql),它可以存储uuid的响应,使得api能够非常快速和容易地回答某个特定uuid的响应是否可用。

相关问题