配置MDB(在Glassfish上)以侦听共享主题订阅

配置MDB(在Glassfish上)以侦听共享主题订阅,glassfish,ejb,java-ee-7,message-driven-bean,Glassfish,Ejb,Java Ee 7,Message Driven Bean,我要寻找的是确切的激活配置属性名称,以便配置消息驱动Bean以共享订阅模式接受来自JMS主题的消息 @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationLookup",propertyValue = "java:app/jms/testT1"), @ActivationConfigProperty(propertyName = "destinationTy

我要寻找的是确切的激活配置属性名称,以便配置消息驱动Bean以共享订阅模式接受来自JMS主题的消息

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationLookup",propertyValue = "java:app/jms/testT1"),
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Topic"),
    //the below property is not working in GlassFish (4.1) - just to convey the idea
    @ActivationConfigProperty(propertyName = "sharedSubscription",propertyValue = "TRUE") 
})
//编辑


请注意:目的是能够在JavaEE应用程序中使用MDB(针对负载平衡目的的共享主题),该应用程序可以横向扩展。此问题与群集设置无关,因此使用
UseSharedSubscriptionClusteredContainer
(在Open MQ中)不适用

如果我理解正确,您不需要这样做。在一个订阅上允许多个使用者的目的是绕过Java SE限制,这在Java EE中不是问题:

在Java EE中,您只需创建MDB以订阅主题,然后将bean池配置为具有多个MDB:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd">
<glassfish-ejb-jar>
  <enterprise-beans>
    <ejb>
      <ejb-name>MyPooledMDB</ejb-name>
      <bean-pool>
          <max-pool-size>5</max-pool-size>
          <resize-quantity>1</resize-quantity>
          <steady-pool-size>1</steady-pool-size>
      </bean-pool>
    </ejb>
  </enterprise-beans>
</glassfish-ejb-jar>

MyPooledMDB
5.
1.
1.
有关更多信息,请参阅Oracle GlassFish文档:


(请注意,
稳定池大小
==“初始和最小池大小”)

感谢您的输入。你说得对。我对这个要求有点偏离(我已经编辑过了)。目标不是依赖于特定于应用服务器的集群。相反,将每个JavaEE容器进程视为无状态(水平)可伸缩实体。如果我的负载增加,应该能够触发其他实例并让MDB“共享”负载,例如,如果向主题发送了两条消息,并且我在两个节点上有相同的MDB,则每个节点应收到一条消息(共享)。Idea与KafkaIt中的消费者组非常相似,应该可以使用JavaSE容器通过创建共享消费者对象和使用自定义代码(MDB免费提供的东西)处理并发部分来实现这一点。但是,我的观点是能够使用MDB来实现这一点,我认为这里的关键区别在于订阅者和消费者之间。共享订阅允许您在一个订阅上拥有多个使用者,但您仍然可以在一个主题上拥有多个订阅者。单个服务器或多个服务器上的MDB池(我认为)将作为不同的订户实现,这将给您带来您想要的效果。(多个MDB,每个MDB接收来自同一主题的消息)。是,Mike。订阅和使用者是不同的JMS概念。但是订阅模式(在本例中为“共享”)是由使用者(客户机)决定的—它不是在JMS代理上配置的。因此,在使用远程代理和单个JVM进程(MDB)的情况下,MDB提供商应负责明确指定其“订阅模式”。我尝试了以下设置(1)两个配置为群集的Payara独立实例()-需要注意的重要一点是,与EJB相关的集群并没有被故意激活,因为我的全部意图是对微服务风格的设置进行建模(无状态实例,可以轻松扩展)(2)带有主题的远程OpenMQ(3)两个实例上都有MDB的WAR