在"Enterprise Integration Patterns"中(在我实现队列消息传递系统时一直使用本书作为参考),有一个命令消息,文档消息,event message等概念。
在我的系统中,我决定将"pull model"用于事件消息。因此,当数据库中的文档更新时,它会广播如下的事件消息:
routing key: 'UserUpdated'
body: { _id: '5787f132f50f7b03002cf835' }
然后,任何感兴趣的观察者都可以通过RPC(请求/回复)通道直接请求文档的最新版本(在这种情况下为“用户”)并执行他们需要对该状态执行的操作以便进行他们自己的服务中的更改(例如,当用户更新时,另一个系统可能想知道它,然后在Redis或其他东西中缓存该用户记录)。
在我的其他消息类型中(例如,UpdateUser
之类的命令消息),我还在消息头中发送授权令牌。这是有道理的,因为命令UpdateUser
旨在调用另一个系统的更改。
但是,在事件消息中放置授权令牌是否有意义?
我的想法是,事件并不一定要求对任何观察者进行更改,并且不需要“授权”只是为了通知系统发生的事情(此外,两个系统都已连接到同一个系统)队列服务器,需要一些身份验证才能开始);相反,观察者只是在消息中看到一些_id,并单独请求文档,然后可以根据需要对其自己的服务进行更改(在对发起事件消息的服务器的文档请求中,观察者< em> 提供授权令牌)。有什么想法吗?
对于任何对实施细节感兴趣的人:
答案 0 :(得分:2)
但是,在内部放置授权令牌也是有意义的 事件消息?
不,只要没有人可以伪造事件消息。