部署MDB的多个副本

时间:2012-03-22 17:54:03

标签: java jms weblogic

我们有一个JMS主题,它接收几种类型的消息(在部署时确定类型的数量),并要求按类型按顺序处理消息。所有类型都可以由同一个MDB处理。

我们有一个解决方案,我们使用每种类型的选择器部署该MDB的多个版本。虽然这有效,但这意味着我们每次部署新版本时都需要在应用程序中更新部署描述符,这似乎是一个容易出错的过程。

我们已经考虑过使用部署计划来处理这个问题,但据我所知,它只能更改现有的MDB,而不是添加新的MDB。

我们缺少什么?

我们正在使用weblogic 10.3

2 个答案:

答案 0 :(得分:1)

这是你可以处理它的一种方法。由于您实际上是对单个线程处理给定类型的消息进行单线程处理,因此您可能会丢弃MDB,而是管理一个线程池,每个线程处理一个类型。您可以实现一个单独的服务,该服务公开JMX管理接口(或远程EJB接口),允许您动态添加/删除类型。当此服务接收到添加新类型的调用时,它会启动一个新线程,该线程只是循环执行正常的JMS接收调用(使用适当的选择器)。如果您的服务维护了类型的地图 - >线程,您还可以实现删除类型的逻辑(例如,中断线程或以其他方式通知它已完成)。

如果达到每个线程类型不再扩展的程度,那么您需要在服务中实现更复杂的排队和池化解决方案。

答案 1 :(得分:0)

只是一个想法:将您的主题变成一个队列。创建一个“分发服务器”MDB,您可以配置一个(1)侦听该队列。 MDB接受消息,维护(动态,静态)类型(“xyz”)到队列(“queue15”)的映射,并将消息重新发送到适当的“工作队列”。 创建N(固定的,N>多个类型)工作队列,其中一个MDB监听每个队列。不需要特殊配置,因为您的MDB可以处理任何类型。

这样,您无需事先知道哪些消息类型。 您的工作人员MDB将发现他们只接收一种类型的消息,并按顺序。 那规模吗?好吧,只有一个“经销商”,但只是查看类型,并重新发送。这真的应该很快。实际工作在第二级是异步的。

我认为甚至可以动态创建“工作队列”,MDB可以监听它们(可能通过特定于容器的API?)。