मैं लिबर्टी 18.0.0.2 पर जावाईई 8 का उपयोग करता हूं।
मैं इस तरह जेएमएस सक्रियण कॉन्फ़िगरेशन सेट करता हूं (server.xml):

  <messagingEngine>
    <queue id="application" />
  </messagingEngine>
  <jmsActivationSpec id="app/appMDB">
    <properties.wasJms destinationRef="java:app/onlineQueue" />
  </jmsActivationSpec>   

और यह मेरा सरल एमडीबी संदेश श्रोता है:

@MessageDriven(
        name = "appMDB",
        mappedName = "java:app/onlineQueue",
        activationConfig = {
                @ActivationConfigProperty(propertyName = "destinationType",
                        propertyValue = "javax.jms.Queue"),
                @ActivationConfigProperty(propertyName = "destination",
                        propertyValue = "java:app/onlineQueue")
        }
)
public class ApplicationMessageListener implements MessageListener {
...
}

और मैंने इस तरह की दो कतारें भी परिभाषित की हैं:

@Stateless
@JMSDestinationDefinitions(
        value = {
                @JMSDestinationDefinition(
                        name = "java:app/onlineQueue",
                        interfaceName = "javax.jms.Queue",
                        destinationName = "application"),
                @JMSDestinationDefinition(
                        name = "java:app/offlineQueue",
                        interfaceName = "javax.jms.Queue",
                        destinationName = "application")
        }
)
public class MessageService {

    @Inject
    private Logger logger;

    @Resource(lookup = "java:app/onlineQueue")
    private Queue onlineQueue;

    @Resource(lookup = "java:app/offlineQueue")
    private Queue offlineQueue;

    @Inject
    private JMSContext context;

    @EJB
    private MessageUtils messageUtils;

    public void sendToOnlineQueue(SimpleMessage simpleMessage) {
        TextMessage message = messageUtils.createTextMessage(simpleMessage);
        logger.info("Send online Message : " + simpleMessage);
        JMSProducer producer = context.createProducer();
        producer.send(onlineQueue, message);
    }

    public void sendToOfflineQueue(SimpleMessage simpleMessage) {
        TextMessage message = messageUtils.createTextMessage(simpleMessage);
        logger.info("Send offline Message : " + simpleMessage);
        JMSProducer producer = context.createProducer();
        producer.send(offlineQueue, message);
    }
}   

मेरी समस्या यह है कि एमडीबी कई कतारों को सुनें।
मैं चाहता हूं कि mdb केवल onlineQueue सुनें।
इस समस्या को कैसे ठीक कर सकते हैं?

2
mah454 22 अक्टूबर 2018, 20:16

1 उत्तर

सबसे बढ़िया उत्तर

आपके पास दो भिन्न @JMSDestinationDefinition हैं। एक के पास java:app/onlineQueue का name है, और दूसरे का नाम java:app/offlineQueue है। हालांकि, उन दोनों के पास आवेदन का destinationName है जो मुझे गलत लगता है। चाहे आप जेएनडीआई में java:app/onlineQueue या java:app/offlineQueue देखें, आपको application नाम के गंतव्य का संदर्भ मिलेगा। यही कारण है कि एमडीबी द्वारा java:app/offlineQueue को भेजे गए संदेशों को उठाया जाता है।

1
Justin Bertram 22 अक्टूबर 2018, 20:02