是否可以更改HornetQ中的_HQ_GROUP_ID名称值?我正在使用Wildfly 8和默认的HornetQ JMS系统。我已经配置了一个桥接器来将本地大黄蜂队列连接到远程ActiceMQ队列。当发送带有JMSXGroupID属性的消息时,HornetQ似乎将名称改为_HQ_GROUP_ID。为什么会这样做,有没有办法改变它?
相关代码,
try {
message.clearProperties();
MapMessage map = (MapMessage) message;
String customer = map.getString("customer");
String location = map.getString("location");
// setting the property here
message.setStringProperty("JMSXGroupID", customer + "@" + location);
message.setJMSTimestamp(System.currentTimeMillis());
context.createProducer().send(msmt, message); // relay message to apacheMQ in chaos
} catch (JMSException jmse) {
log.severe(jmse.getMessage());
}
答案 0 :(得分:0)
似乎在HornetQ源代码" JMSXGroupID"在调用setStringProperty()时检查,然后用_HQ_GROUP_ID覆盖HornetQ的内部分组表示,
public void setStringProperty(final String name, final String value) throws JMSException
{
checkProperty(name);
if (HornetQMessage.JMSXGROUPID.equals(name))
{
message.putStringProperty(org.hornetq.api.core.Message.HDR_GROUP_ID, SimpleString.toSimpleString(value));
}
else
{
message.putStringProperty(new SimpleString(name), SimpleString.toSimpleString(value));
}
}
因此,解决方法是使用setObjectProperty(String,Object)方法。
try {
message.clearProperties();
MapMessage map = (MapMessage) message;
String customer = map.getString("customer");
String location = map.getString("location");
message.setObjectProperty("JMSXGroupID", customer + "@" + location);
//message.setStringProperty("JMSXGroupID", customer + "@" + location);
message.setJMSTimestamp(System.currentTimeMillis());
context.createProducer().send(msmt, message); // relay message to apacheMQ in chaos
} catch (JMSException jmse) {
log.severe(jmse.getMessage());
}
}
这并不明显,可能只是一种临时解决方法。 HornetQ依赖于这种表示形式来进行自己的分组和聚类,所以除非你有一个正确的桥接到理解这种表示的JMS代理(例如ActiveMQ),否则这有可能造成很大的破坏。