我想使用RabbitMQ在多个应用程序之间进行通信,这些应用程序部署在不同的网络上并由不同的人员维护.作为消息(消费者)的接收者,我希望确信消息的发送者(生产者)是他声称的那个人.我能想到的最佳方法是签名和验证这些签名.由于这是我第一次使用RabbitMQ做某事,我对如何实现这一点感到困惑.
消息发送者和接收者是Java应用程序.我决定使用Spring AMQP模板让事情变得更容易.在一个完美的场景中,我想以某种方式拦截消息,当它已经是字节数组/流时,签署此blob并将签名附加为消息头.在接收端,我再次想要在反序列化之前拦截消息,从头部对blob验证签名,如果一切正常,则反序列化它.但是我没有在Spring-Rabbit中找到任何方法来做这件事.
Spring-Rabbit中有一个MessagePostProcessor的概念,但是当调用它时,消息仍然没有完全序列化.看起来我想象的东西会被某人解决,因为感觉这是一个常见的问题,但是我的研究让我光着头.
目前我使用AmqpTemplate.convertAndSend进行消息发送,使用@RabbitListener进行消息接收.但我并没有被春天困住.我可以使用我喜欢的任何东西.它似乎是一种简单的方法.我正在使用Jackson进行JSON的消息序列化.问题是如何在正确的地方拦截发送和接收.
备份计划是将数据和签名放在正文中并使用包装器将它们联合起来,但这意味着双重序列化并且不像我想要的解决方案那样干净.
那么有没有人有这方面的经验,也许可以建议我如何解决这个问题?