[英]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
對象中,那么如何針對外部遠程代理創建ConnectionFactory
, Connection
和Session
對象以發送答復? JMS規范是否保證啟動會話的所有信息都可用,如果可以,如何?
但是,實際上是什么將這個Destination對象鏈接到隊列的心理位置呢?
JMS規范未定義Destination
和物理位置之間的任何鏈接。 Destination
本質上只是對將消息發送到的實現特定名稱的引用。
如果有關遠程代理的唯一可用信息位於JMSReplyTo標頭的Destination對象中,那么如何針對外部遠程代理創建ConnectionFactory,Connection和Session對象以發送答復?
除非您使用的實現將其Destination
擴展為包括此類信息(即,超出JMS規范的要求),否則您將無法基於Destination
創建連接。 我不知道有這樣的擴展的實現,如果有實現的話我會感到驚訝。
JMS規范是否保證啟動會話的所有信息都可用,如果可以,如何?
JMS規范不提供此類保證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.