簡體   English   中英

JMSReplyTo,JMS代理的物理位置

[英]JMSReplyTo, physical location of the JMS broker

我對JMSReplyTo標頭的性質感到困惑。 它包含類型為javax.jms.Destination對象,通常是消息的發起者創建的臨時隊列的邏輯句柄。 這是臨時隊列創建和設置JMSReplyTo標頭的實驗示例。

@Component("jmsbean")
public static class JmsBean {

    @Autowired
    @Qualifier("jmscf1")
    ConnectionFactory jmsServer1;

    @Autowired
    @Qualifier("jmscf2")
    ConnectionFactory jmsServer2;

    public String testJms(@Body String body) throws JMSException {

        Connection conn = jmsServer1.createConnection();
        conn.start();
        Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);

        Connection conn2 = jmsServer2.createConnection();
        conn2.start();
        Session session2 = conn2.createSession(false, Session.AUTO_ACKNOWLEDGE);

        TemporaryQueue tempQueue = session2.createTemporaryQueue();

        TextMessage message = session.createTextMessage();
        message.setJMSCorrelationID("tuomas");
        message.setJMSReplyTo(tempQueue);
        message.setJMSMessageID("tuomas");
        message.setText(body);

        Queue dest = session.createQueue("dest");
        MessageProducer producer = session.createProducer(dest);
        producer.send(message);

        session.close();
        conn.close();

        MessageConsumer consumer = session2.createConsumer(tempQueue);

        TextMessage reply = (TextMessage) consumer.receive();

        session2.close();
        conn2.close();

        return reply.getText();
    }
}

現在,消息使用者可以從Message對象中選擇JMSReplyTo標頭以獲取對臨時隊列的引用,並應將響應發送到此特定隊列。 最后,發起者從該隊列中接收到它。

但是,實際上是什么將這個Destination對象鏈接到隊列的物理位置的呢? 我正在考慮一種特殊情況,其中臨時隊列位於(請求)使用者域之外的Internet上的遠程服務器中。 首先,消費者必須具有某種IP地址才能訪問代理。 那么這是規范的要求還是提供者的特定要求?

如果有關遠程代理的唯一可用信息位於JMSReplyTo標頭的Destination對象中,那么如何針對外部遠程代理創建ConnectionFactoryConnectionSession對象以發送答復? JMS規范是否保證啟動會話的所有信息都可用,如果可以,如何?

但是,實際上是什么將這個Destination對象鏈接到隊列的心理位置呢?

JMS規范未定義Destination和物理位置之間的任何鏈接。 Destination本質上只是對將消息發送到的實現特定名稱的引用。

如果有關遠程代理的唯一可用信息位於JMSReplyTo標頭的Destination對象中,那么如何針對外部遠程代理創建ConnectionFactory,Connection和Session對象以發送答復?

除非您使用的實現將其Destination擴展為包括此類信息(即,超出JMS規范的要求),否則您將無法基於Destination創建連接。 我不知道有這樣的擴展的實現,如果有實現的話我會感到驚訝。

JMS規范是否保證啟動會話的所有信息都可用,如果可以,如何?

JMS規范不提供此類保證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM