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

为 JMS 2.0 使用者设置客户机 ID

东郭子默
2023-03-14

在JMS 1.x中,客户端ID用于在创建持久订阅时唯一标识客户端。这个答案解释了JMS 1.x中clientId的用法

对于JMS 2. x,clientId是可选的。我想了解在JMS 2. x中提供clientId的利弊。

摘自甲骨文中一篇关于 JMS 2.x 功能的文章:

共享持久订阅。这些仅在JMS 2.0中可用,并使用createSharedDurableConsumer创建。它们可以有任意数量的消费者。设置客户端标识符是可选的。订阅由订阅名称和客户端标识符(如果已设置)的组合标识。

听起来好像订阅名称现在是惟一的标识符,但是为什么还要有clientID呢?这些是session类上的新方法,所以它不可能是向后兼容的。用JMS 2.x设置clientId有什么好处或坏处吗?

MessageConsumer messageConsumer = session.createSharedDurableConsumer(topic, "myDurableSub");

共有1个答案

狄德泽
2023-03-14

JMS 2规范指明了客户机ID存在于第6.1.3节中的原因:

JMS定义的客户端标识符的唯一用途是在标识非共享持久订阅时强制使用,或者在标识共享持久订阅或非持久订阅时可选使用。

关于共享的非持久订阅,规范在 8.3.3 节中是这样说的:

共享的非持久订阅由客户端指定的名称和客户端标识符(如果已设置)标识。如果在首次创建共享非持久订阅时设置了客户端标识符,则随后希望在该共享非持久订阅上创建使用者的客户端必须使用相同的客户端标识符。

该规范在 8.3.4 节中对共享持久订阅进行了相同的基本说明:

共享持久订阅由客户端指定的名称和客户端标识符(如果设置)标识。如果在第一次创建共享持久订阅时设置了客户端标识符,则随后希望在该共享持久订阅上创建消费者的客户端必须使用相同的客户端标识符。

通过使客户端标识符对于共享持久和非持久订阅是可选的,它使得共享订阅更加方便,因为每个客户端只需要提供订阅名称,而不需要提供客户端标识符和订阅名称。这符合JMS 2的总体主题,即简化API,使JMS更易于使用。

 类似资料:
  • 自定义成菜单 说明: 1)启用该功能后,直播客户端可以通过自定义菜单的方式加载用户自定义的网页,方便结合自身业务进行交互操作(客户端5.0.0以上版本支持) 问卷设置 说明: 1)在直播管理页面点击 “问卷设置”,启用该功能后,直播客户端可以通过接口请求的方式将用户问卷库中的问卷导入到客户端中使用 2)关于问卷设置的具体功能及使用方法,请参考:问卷接口开发指南 菜单设置 说明: 1)支持对客户端的

  • 问题内容: 我正在尝试设置HTTP客户端,以便它使用代理,但是我不太明白该怎么做。该文档有多个对“代理”的引用,但是似乎没有一个功能允许定义代理。我需要的是这样的: 知道如何在Go中执行此操作吗? 问题答案: lukad是正确的,您可以设置环境变量,如果这样做,Go将默认使用它。 重击: 走: 您还可以构造自己的http.Client,无论环境如何配置,该客户端都必须使用代理: 如果您不能依赖环境

  • 我目前有一个简单的TextMessage Source,它向我的Websocket客户端流发送消息,如下所示: 因此,我目前有一个Source类型的源代码[TextMessage.Strict,NotUsed],但我想使用注释掉的代码,其中我有一个ActorRef作为我的源代码。 我试过这个: 因此,当我使用ActorRef作为我的源时,我很难尝试将其放入图中。我得到了这个编译时错误: 类型不匹配

  • WebSocketClient 结构体指针上只有如下两个可设置的字段: Header 字段 用来设置自定义的 HTTP 头信息。 MaxConcurrentRequests 方法 该方法返回最大并发请求数。 SetMaxConcurrentRequests 方法 该方法用于设置最大并发请求数,当并发请求超过该设置之后,后面的请求将会排队等待。该设置默认值为 10。

  • TCPClient 除了包含上面的继承自 SocketClient 的设置以外,还有以下几个可以设置的字段: Linger 字段 用于设置当连接中仍有数据等待发送或接受时的 Close 方法的行为。 如果其值小于 0(默认),Close 方法立即返回,操作系统停止后台数据发送;如果其值等于 0,Close 立刻返回,操作系统丢弃任何未发送或未接收的数据;如果其值大于 0,Close 方法阻塞最多