我正在编写一个Spring Boot应用程序,它将监听一个或多个JMS主题。我们已经为我们的JMS实现选择了ActiveMQ。
我们主要关注的是性能和可扩展性。我们期待每秒可能有数千条消息到达。我们提出了两种选择:
使用单个主题和单个@JmsListener方法。在侦听器内部,检查JMS属性以确定处理消息的正确策略。
@JmsListener(destination = "response", containerFactory = "myTopicFactory")
public void onMessage(Message message) throws IOException {
message.getProperty("message.type")
JmsHandler handler = messageStrategyMap.get(messageType);
handler.handle(message);
}
使用多个主题和多个@JmsListener方法。在这种情况下,不需要切换逻辑。
@JmsListener(destination = "responseType1", containerFactory = "myTopicFactory")
public void onMessage1(Message message) throws IOException {
// Handle message type 1
}
@JmsListener(destination = "responseType2", containerFactory = "myTopicFactory")
public void onMessage2(Message message) throws IOException {
// Handle message type 2
}
方法#1的一个优点是不需要管理多个目的地的资源;那里只有一个目的地。这也意味着协作系统只需要知道一个主题。
方法#2的一个优点是不需要任何类型的开关逻辑。进入主题A的任何消息都有专门针对主题A格式化的有效负载。此方法的关注点是,可能无法在不同的JMS侦听器之间有效地分配用于处理传入消息的资源。
此外,对集装箱工厂配置的任何建议都表示赞赏。
答案 0 :(得分:1)
取决于邮件大小和数量。使用多个侦听器,您也可以获得多个线程,因此可以更快地运行,直到有大量主题(因此线程)的下降。我建议在你的代表系统上设置一个快速测试和基准测试,然后你将使用公司数字进行比较。