我应该为消息队列中的事件消息实现身份验证吗? (一直用这本书作为参考,而我实现队列消息系统)

问题描述:

"Enterprise Integration Patterns",有一个命令消息,文档消息,event message的概念,等我应该为消息队列中的事件消息实现身份验证吗? (一直用这本书作为参考,而我实现队列消息系统)

在我的系统我已经决定使用"pull model"作为事件消息。所以,当在数据库中更新的文件,它广播的事件消息是这样的:

routing key: 'UserUpdated' 
body: { _id: '5787f132f50f7b03002cf835' } 

然后,任何有兴趣的观测者可以简单地通过RPC(请求/应答)请求信道最近的文档版本(在这种情况下是一个“用户”),并且做他们需要处理的状态,以便对他们自己的服务进行更改(例如,当用户更新时,另一个系统可能想知道它并随后缓存该用户在Redis中记录什么)。

在我的其他消息类型中(例如UpdateUser之类的命令消息),我还在消息头中发送授权令牌。这是有道理的,因为命令UpdateUser意在调用另一个系统中的更改。

但是,在事件消息内还放置授权令牌是否有意义?

我的想法是事件不一定要求任何观察者改变,并且不需要被“授权”只是为了通知系统关于发生的事情(此外,两个系统已经连接到相同的队列服务器,需要一些身份验证才能开始);相反,观察者只是看到消息中的一些_id,并单独请求一个文档,然后可以对其自己的服务进行更改(如果需要的话)(在发送事件消息的服务器的文档请求中,观察者是否提供授权令牌)。有什么想法吗?

任何有兴趣的实现细节:

  • 的node.js(与amqplib)
  • 的RabbitMQ

然而,它是有意义的也把授权令牌里面 的事件消息?

不,只要没有人能伪造一个事件讯息。