JMS主题中缺少消息

时间:2016-04-15 20:46:40

标签: java java-ee jms weblogic12c message-driven-bean

我有一个WebLogic(12.1.3)群集,其中包含两个托管服务器。每个服务器都部署了相同的EAR。 EAR包含两个消息驱动bean(MDB),用于侦听相同的分布式JMS主题。

每当向JMS主题发送消息时,只有一个MDB接收它。有没有人建议原因可能是什么?我怀疑它可能是WebLogic为MDB主题订阅提供的所有不同配置选项,但我已经尝试了所有我能想到的但没有成功。

任何帮助都将不胜感激。

@MessageDriven for MDB1

@MessageDriven(activationConfig = {
  @ActivationConfigProperty(propertyName="destinationJndiName", propertyValue="jms/ObjectCreatedTopic"),
  @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"),
  @ActivationConfigProperty(propertyName="subscriptionDurability", propertyValue="Durable"),
  @ActivationConfigProperty(propertyName="topicMessagesDistributionMode", propertyValue="One-Copy-Per-Application"),
  @ActivationConfigProperty(propertyName="distributedDestinationConnection", propertyValue="LocalOnly")
}, name="ObjectCreatedListener1")

@MessageDriven for MDB2

@MessageDriven(activationConfig = {
  @ActivationConfigProperty(propertyName="destinationJndiName", propertyValue="jms/ObjectCreatedTopic"),
  @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"),
  @ActivationConfigProperty(propertyName="subscriptionDurability", propertyValue="Durable"),
  @ActivationConfigProperty(propertyName="topicMessagesDistributionMode", propertyValue="One-Copy-Per-Application"),
  @ActivationConfigProperty(propertyName="distributedDestinationConnection", propertyValue="LocalOnly")
}, name="ObjectCreatedListener2")

1 个答案:

答案 0 :(得分:0)

我认为以下weblogic documentation关于该主题的摘录适用于您(强调我的):

  

One-Copy-Per-Application topic持久的MDB,订阅本地RDT,并使用LocalOnly属性的默认distributedDestinationConnection值,不支持服务迁移,只需要一个根据WebLogic Server实例配置主题成员。如果发生服务迁移,如果没有配置本地主题成员,或者如果每个服务器部署了多个主题成员,则应用程序可能会遇到重复或丢失的消息,并且还可能创建累积未处理消息的放弃订阅。如果需要服务迁移,请使用EveryMember属性distributedDestinationConnection选项,而不是默认LocalOnly

所以你有它:你的设置唯一可行的参数组合是

@ActivationConfigProperty(propertyName="topicMessagesDistributionMode", propertyValue="One-Copy-Per-Application")
@ActivationConfigProperty(propertyName="distributedDestinationConnection", propertyValue="EveryMember")