芭蕾舞女演员java.jms:如何设置请求回复通讯

问题描述

我能够与0.983.0版的芭蕾舞女演员建立请求/答复通信,但在1.2.7版中失败。有人可以建议吗?

这是我尝试的代码

jms:Connection connection = check jms:createConnection(jmsConfig);
    jms:Session session = check connection->createSession({ackNowledgementMode: "AUTO_ACKNowLEDGE"});
    jms:Destination queue = check session->createQueue("MyQueue");
    jms:Destination tempQueue = check session->createTemporaryQueue();
    jms:MessageProducer producer = check session.createProducer(queue);
    jms:TextMessage msg = check session.createTextMessage("Hello Ballerina!");

    check producer->send(msg);

    jms:MessageConsumer consumer = check session->createConsumer(tempQueue);
    jms:Message? response = check consumer->receive(3000);
    if (response is jms:TextMessage) {
      var val = response.getText();
      if (val is string) {
          log:printInfo("Message received: " + val); 
      } else {
          log:printInfo("Message received without text");
      }
    } else {
        log:printInfo("Message received.");
    }

这将导致以下错误

error: java.lang.classCastException message=java.lang.String incompatible with javax.jms.Destination
        at ballerina.java_jms.C:.src.java$$$jms.session:createJmsConsumer(/C:/src/java.jms/session.bal:343)
           ballerina.java_jms.Session:createConsumer(/C:/src/java.jms/session.bal:223)
           acme.jmsTest:main(main.bal:30)

当我将消费者使用的目的地更改为生产者使用的目的地(即“队列”)时,就像在samples中一样,一切正常。因此,要么我以错误的方式使用了临时队列,要么临时队列存在错误

解决方法

我可以在ActiveMQ服务器上使用Ballerina 1.2.7和ballerina / java.jms 0.8.1重现相同的错误。

error: java.lang.ClassCastException message=java.lang.String cannot be cast to javax.jms.Destination
    at ballerina.java_jms.src.java$$$jms.session:createJmsConsumer(/src/java.jms/session.bal:343)
       ballerina.java_jms.Session:createConsumer(/src/java.jms/session.bal:223)
       user.jms_request_reply:main(main.bal:17)

我创建了一个issue来进行跟踪。 希望在将来的版本中可以解决此问题。

您能告诉您使用的消息代理吗?如果该用例不是特定于代理的,则可以在芭蕾舞女演员中查看其他几个消息传递连接器选项。