Ballerina java.jms: 如何设置请求回复通信
Ballerina java.jms: How to set up request reply communcation
我能够与 Ballerina 版本 0.983.0 建立 request/reply 通信,但我在版本 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 中一样,一切正常。因此,要么我以错误的方式使用临时队列,要么临时队列存在错误。
我可以使用 Ballerina 1.2.7 和 ballerina/java.jms 0.8.1 使用 ActiveMQ 服务器重现相同的错误。
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 来跟踪这个。
希望这会在未来的版本中得到修复。
能否介绍一下您使用的消息代理?如果用例不是特定于经纪人的,您可以查看 ballerina 中的其他几个消息传递连接器选项。
我能够与 Ballerina 版本 0.983.0 建立 request/reply 通信,但我在版本 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 中一样,一切正常。因此,要么我以错误的方式使用临时队列,要么临时队列存在错误。
我可以使用 Ballerina 1.2.7 和 ballerina/java.jms 0.8.1 使用 ActiveMQ 服务器重现相同的错误。
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 来跟踪这个。 希望这会在未来的版本中得到修复。
能否介绍一下您使用的消息代理?如果用例不是特定于经纪人的,您可以查看 ballerina 中的其他几个消息传递连接器选项。