我有几个使用Solace队列在它们之间进行通信的微服务。我的任务是找到一种解决方案,以检查thouse队列中流动的消息以及基于内容的内容或将内容推送到InfluxDB中的数据,这些数据将由Grafana解释。
长话短说,我需要知道是否有任何技术解决方案来获取在队列中传递的每条消息(拦截消息)的副本,而无需实际使用。
还有一个要求,不要修改任何现有服务的代码,因此我的计划是创建一个附加队列,以根据它们的名称连接到此队列,以某种形式嗅探消息。
我想知道这在技术上是否可行。
答案 0 :(得分:2)
针对您的情况,有两种可能的解决方案,根据您的确切要求,这些解决方案可能合适也可能不合适。
如果InfluxDB侦听器组件可以与您的微服务并行运行,那么最简单的方法是使发布的微服务针对某个主题进行发布,将消耗的微服务连接到队列< em>已订阅,并且InfluxDB侦听器组件将拥有自己的队列来订阅相同的主题……这使它可以接收发布微服务发送的每条消息的副本(标准发布/订阅模式)。这是Solace的一种典型的最佳实践,它是在主题上发布,从队列使用以及在基础架构中配置/控制主题到队列的映射...它允许您更改应用之间的消息路由(例如添加新的侦听器)而不会影响您现有的代码/流。
如果您无法更改要发布到主题的发布者代码,则仍可以通过为InfluxDB使用者使用第二个队列,并将其订阅到第一个队列的“网络主题”来实现相同的功能。像#P2P/QUE/queue-name
之类的东西……您可以在队列的详细信息中看到这个特殊主题。
或者,如果您需要InfluxDB侦听器组件直接作用于您的微服务应用程序(而不是通过消息副本并行执行),那么您需要使用一个队列将第一个微服务发布到其中,然后使用您的InfluxDB侦听器...从中进行内容路由/决策,然后将消息发布回第二个队列,第二个微服务可以从中使用该消息。这实际上使InfluxDB侦听器只是微服务之间的处理链中的另一个微服务。
请注意,对于前两个选项(消息的副本位于两个队列中),Solace仅在磁盘上保留消息的一个副本并维护引用计数。因此,磁盘使用不受“扇出”的影响。