当前位置: 首页 > 知识库问答 >
问题:

Azure Service bus with AMQP-如何指定会话ID

逑俊楚
2023-03-14

我正在尝试使用AMQP QPID java库向服务总线发送消息

我得到这个错误:

“需要为支持排序的分区主题的所有代理消息设置SessionId”

我的主题已打开强制消息排序(这是我得到这个错误的方式我猜)

使用Azure Service bus java库(而不是AMQP)时,我有以下功能:

这实体设置会话ID(…);

使用AMQP库时,我看不到在要发送的消息上设置会话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) {
    }

共有2个答案

邢俊悟
2023-03-14

正如您所猜测的,有一个类似的SO线程Azure Service Bus topics partitioning验证了,通过setSupportOrderingwithfalse禁用功能强制消息排序可以解决此问题,但无法通过Azure Service Bus Java library完成,因为属性SupportOrdering现在处于私有状态。

您可以尝试按照@XinChen使用AMQP所说的设置属性,如下所示。

服务总线会话,在AMQP 1.0协议中也称为“组”,是相关消息的无界序列。ServiceBus保证会话中消息的顺序。

希望有帮助。

施权
2023-03-14

SessionId属性映射到AMQP消息属性。group-id.Qpid JMS客户端应该将其映射到JMSXGroupID属性,因此请尝试以下操作,createBytesMessage。设置字符串属性(“JMSXGroupID”,“session-1”)

 类似资料:
  • null -----更新--2015-11-13----嗨,克雷格林格,我尝试了你的建议,但得到了一个例外: 我的代码:

  • 问题内容: 我在端口443上创建了一个套接字,如下行: 然后,我想在此套接字中查看启用的密码套件,我使用了: 然后,我只选择一个我希望我的应用程序在与远程服务器建立握手时使用的密码套件。我做了以下事情: 然后我进行了握手,并检查了会话密码套件: 但是我发现握手后在上一个打印输出语句中打印的密码的名称(据我了解,这是会话中实际使用的密码)不是我之前使用的密码 为什么我仍然看不到我选择的密码套件是二手

  • 在发布这个问题之前,我谷歌了很多这个问题,并且在网络Socket@ServerEndpoint中从HttpServletRequest访问Http会话是我能找到的最好的问题/答案之一,但它似乎不能解决我的问题。 我可以通过这种方式从websocket访问HttpSession,但是我无法访问与普通HTTP请求相同的CDI会话bean实例。 我也尝试在会话中存储Weld实例,并尝试在WebSocke

  • 我正在Codeigniter中创建API。在这个API中,我为用户提供了一个登录函数。如果登录成功,我将在CI会话中设置用户数据,并将会话返回给用户。 现在,用户可以使用该会话ID来验证他自己的所有其他请求,如添加/更新/删除。基本上,我希望当用户发送下一个请求时,我可以根据他的会话ID验证他的凭据。 客户请求代码: 上面是一个从客户端到服务器的登录请求示例。在服务器端,服务器验证客户端提供的凭据

  • 问题内容: Singleton无法自动装配SessionBean,而ScopedProxy可以。 假设在同一应用程序中同时有100个用户有一个有效的会话,那么ScopedProxy如何确定会话的含义? 我认为ScopedProxy不会选择任何随机会话,我认为这是无稽之谈。 ScopedProxy如何决定要使用的会话? 如果0个用户拥有一个会话该怎么办?会发生吗? @Async是不同于调用Reque

  • 问题内容: 我刚刚有了Hibernate Session和Connection之间的关系。但是现在,我又遇到一个问题:hibernate会话工厂如何管理会话?在以下代码段中:DAO类的save()方法: 当我们调用时,它将创建一个新会话(通过ThreadLocal附加到当前线程),该会话也附加到JDBC连接。但是,正如您所看到的,我们不需要关闭该会话(会话。 close()),都没有连接。那么,H