问题描述
Artemis 服务器的时长寻址和队列设置为:
<address-settings>
<address-setting match="#">
<auto-create-addresses>false</auto-create-addresses>
<auto-delete-addresses>false</auto-delete-addresses>
<auto-create-queues>false</auto-create-queues>
<auto-delete-queues>false</auto-delete-queues>
</address-setting>
</address-settings>
<addresses>
<address name="test">
<anycast>
<queue name="abc.filter"/>
</anycast>
</address>
</addresses>
用于连接队列和订阅消息的javascript客户端是:
<script src="jquery-3.5.1.min.js"></script>
<script src="stomp.js"></script>
<script>
$(document).ready(function() {
let client = Stomp.client("ws://127.0.0.1:61613");
// this allows to display debug logs directly on the web page
client.debug = function (str) {
console.log(str);
};
// the client is notified when it is connected to the server.
// let headers = {"ack": "client","selector": "location = 'Europe'"};
let connected = function(frame) {
client.subscribe("/test",function(message) {
$("#messages").append("<p>" + message.body + "</p>\n");
},{"durable-subscription-name": "filter","selector": "tag = 'aaa'"});
};
client.connect({"client-id": "abc"},connected);
});
</script>
虽然客户端设置了selector
来过滤消息,但是客户端可以接收带有其他标签的消息,例如bbb
:
然而,类似的选择器在 Java 中是有效的:
class Consumer {
ActiveMQConnectionFactory factory;
Connection connection;
Session session;
Queue queue;
MessageConsumer consumer;
public Consumer() {
try {
factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
connection = factory.createConnection();
session = connection.createSession(false,Session.AUTO_ACKNowLEDGE);
queue = session.createQueue("test::abc.filter");
consumer = session.createConsumer(queue,"tag='aaa'");
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
System.out.println("C-" + tag + " RECEIVING > " + ((TextMessage) message).getText());
} catch (JMSException e) {
e.printstacktrace();
}
}
});
connection.start();
} catch (JMSException e) {
e.printstacktrace();
}
}
}
我想问一下为什么 selector
在 stomp-websocket 中不起作用?
发送消息的代码是:
public Producer() {
try {
factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
connection = factory.createConnection();
session = connection.createSession(false,Session.AUTO_ACKNowLEDGE);
queue = session.createQueue("test::abc.filter");
producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
} catch (Exception e) {
e.printstacktrace();
}
}
public void send(String tag,String msg) {
try {
TextMessage message = session.createTextMessage(msg);
message.setStringProperty("tag",tag);
producer.send(message);
System.out.println("SENDING > " + message.getText());
} catch (Exception e) {
e.printstacktrace();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)