我正在尝试使用 AMQP QPID java 库向服务总线发送消息
我收到此错误:
"SessionId needs to be set for all brokered messages to a Partitioned Topic that supports Ordering"
我的主题已启用“强制消息排序”(我猜这是我收到此错误的方式)
当使用Azure服务总线java库(而不是AMQP)时,我有这个功能:
this.entity.setSessionId(...);
使用 AMQP 库时,我没有看到在要发送的消息上设置 session ID 的选项
请注意,如果我取消选中“强制消息排序”选项,消息将成功发送
这是我的代码
private boolean sendServiceBusMsg(MessageProducer sender,Session sendSession) {
try {
// generate message
BytesMessage createBytesMessage = (BytesMessage)sendSession.createBytesMessage();
createBytesMessage.setStringProperty(CAMPAIGN_ID, campaignKey);
createBytesMessage.setJMSMessageID("ID:" + bm.getMessageId());
createBytesMessage.setContentType(Symbol.getSymbol("application/octet-stream"));
/*message is the actual data i send / not seen here*/
createBytesMessage.writeBytes(message.toByteArray());
sender.send(createBytesMessage);
} catch (JMSException e) {
}
最佳答案
SessionId 属性映射到 AMQP 消息properties.group-id。 Qpid JMS 客户端应将其映射到 JMSXGroupID 属性,因此请尝试以下操作,
createBytesMessage.setStringProperty("JMSXGroupID", "session-1");
关于java - 带有 AMQP 的 Azure 服务总线 - 如何指定 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46402822/