java - 带有 AMQP 的 Azure 服务总线 - 如何指定 session ID

标签 java azure session amqp azureservicebus

我正在尝试使用 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/

相关文章:

java - Swift iOS 类中方法和变量的数量

java - 从Java(然后是Eclipse)运行Maven,Gradle或其他基于批处理的脚本

mysql - node.js Passport 用户模式手动设置

java - session 无法在 GAE 服务器上运行,只能在本地运行

php - 为什么这个 session 没有被销毁?

java - 如何使用 java div 类调用唯一文本

java - 如何在Android中解析JSON数组(不是Json对象)

azure - 从外部访问服务

使用 token 凭据的 Azure Synapse 身份验证

Azure 网站和分布式缓存