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

Apache QPID JMS客户端-设置预回迁不起作用

谷梁存
2023-03-14

我使用如下URI配置了一个JmsConnectionFactory:

故障切换:(amqps://11.22.33.44?amqp.idleTimeout=120000

请注意jms。预回迁策略。all=10参数,根据官方文件

... 控制远程对等方可以发送到客户端并保存在每个使用者实例的预回迁缓冲区中的消息数量。

所以我应该不会在客户端中看到超过10条消息,对吧?好吧,那不起作用。

我最终使用反射来定期打印消息队列。每个JmsMessageConsumer的size():

MessageConsumer messageConsumer = ...
Field field = JmsMessageConsumer.class.getDeclaredField("messageQueue");
field.setAccessible(true);
MessageQueue q = (MessageQueue) field.get(messageConsumer);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> System.out.println(q.size()), 10, 10, TimeUnit.SECONDS);

当我的消息处理程序很慢(或被阻塞)时,我看到队列大小略小于1000条消息,这是默认的预取大小。

那么,这是一个bug吗?如何设置不同的预取大小?

我正在使用qpid jms客户端,版本为0.27.0。

共有2个答案

费秦迟
2023-03-14

您的URI不正确,应为:

failover://(amqps://11.22.33.44?amqp.idleTimeout=120000&transport.tcpKeepAlive=true)
    ?jms.prefetchPolicy.all=10&failover.maxReconnectAttempts=20

JMS选项是全局的,因此它们与故障切换选项一起应用于URI的最外层。包装的AMQP连接URI仅包含控制每个特定连接的传输选项。

宓跃
2023-03-14

想出来了。

JmsConnectionFactory有一个JmsPrefetchPolicy。我不知道应该如何使用URI参数进行设置,但可以使用JmsConnectionFactory进行设置。setPrefetchPolicy()如下所示:

JmsConnectionFactory cf = ...
JmsDefaultPrefetchPolicy prefetchPolicy = new JmsDefaultPrefetchPolicy();
prefetchPolicy.setAll(123); // Set prefetch size here
cf.setPrefetchPolicy(prefetchPolicy);

在任何地方都没有看到这方面的记录。

 类似资料:
  • 了解在升级到新版本的 Photoshop 或在不同计算机上安装 Photoshop 时,如何迁移预设、动作、增效工具、首选项和设置。 预设、设置和动作 预设是指在 Photoshop 中应用于图稿的项目和值的集合。您可以随时存储和载入预设,或将其替换为自定值。例如,动作、画笔和键盘快捷键就是预设。Photoshop 附带有预设,但是您也可以自己创建预设。 设置是指当前载入到 Photoshop 中

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

  • 我正在使用Primefaces客户机bean验证,但它不起作用,错误消息消失,即使验证失败也会调用Listener。 示例-xhtml- 我正在使用-Primefaces 4 Jsf 2.2.6(mojarra)tomcat 7 请帮帮我。谢了。

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

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

  • TCPClient 和 UnixClient 这两个结构体包含 SocketClient 这个匿名字段,因此,SocketClient 上的字段和方法都会被继承。 ReadBuffer 字段 设置与连接相关的操作系统接收缓冲区的大小。当为 0 时,表示不进行设置,使用系统默认值。 WriteBuffer 字段 设置与连接相关的操作系统发送缓冲区的大小。当为 0 时,表示不进行设置,使用系统默认值。