【发布时间】:2017-11-12 01:08:28
【问题描述】:
在"Enterprise Integration Patterns"(我在实现队列消息传递系统时一直使用这本书作为参考)中,有命令消息、文档消息、event message 等的概念。
在我的系统中,我决定将"pull model" 用于事件消息。因此,当数据库中的文档更新时,它会广播如下事件消息:
routing key: 'UserUpdated'
body: { _id: '5787f132f50f7b03002cf835' }
然后,任何感兴趣的观察者都可以通过 RPC(请求/回复)通道简单地请求文档的最新版本(在本例中为“用户”),并使用该状态执行他们需要执行的操作,以使他们自己的服务发生变化(例如,当用户更新时,另一个系统可能想知道它,然后将该用户记录缓存在 Redis 或其他东西中)。
在我的其他消息类型中(例如,像UpdateUser 这样的命令消息),我还在消息头中发送了一个授权令牌。这是有道理的,因为命令 UpdateUser 旨在调用另一个系统中的更改。
但是,在事件消息中也放置一个授权令牌是否有意义?
我的想法是,事件不一定要求对任何观察者进行更改,并且不需要仅仅为了通知系统发生的事情而“授权”(此外,两个系统已经连接到同一个系统)队列服务器,需要一些身份验证才能开始);相反,观察者只是在消息中看到一些 _id,并单独请求一个文档,然后可以根据需要对自己的服务进行更改(在对发起事件消息的服务器的文档请求中,观察者 确实提供了一个授权令牌)。有什么想法吗?
对于任何对实现细节感兴趣的人:
- node.js(带有 amqplib)
- RabbitMQ
【问题讨论】:
标签: node.js rabbitmq message-queue