【问题标题】:How to set throttling on JMS proxy in WSO2 ESB 4.9.0如何在 WSO2 ESB 4.9.0 中对 JMS 代理设置限制
【发布时间】:2021-05-07 19:18:48
【问题描述】:

当批量消息堆积在队列上时,我们在 WSO2 ESB 4.9.0 中遇到了 MQ JMS 代理问题。

代理调用的后端服务每秒只能处理 50 个请求,超过这个值我们的后端服务就会失败。

这里的问题是,当消息堆积在队列中时(1000 条消息),代理正在读取队列中的所有消息并发送到后端服务,后端服务失败。

我们可以在代理上设置任何设置来控制代理服务读取的消息。

这里的主要问题是代理非常快地从队列中读取消息并泛滥后端服务。后端服务失败是因为它们不是为处理更高的负载而设计的

【问题讨论】:

    标签: wso2 wso2esb wso2carbon


    【解决方案1】:

    如果您需要监听 JMS 队列并希望以受控方式向后端服务发送消息,则必须使用 Message storeMessage Processor

    【讨论】:

    • 是的阿桑卡。我想读取消息说每秒 10 个请求,并且这些请求需要传递给后端服务。基本上我期望 jms 代理应该调用后端服务同步,而 jms 代理应该等待从 Q 读取消息,直到上一条消息完成
    【解决方案2】:

    您可以在代理服务中定义参数:

    <parameter name="transport.jms.ConcurrentConsumers">1</parameter>
    <parameter name="transport.jms.MaxMessagesPerTask">1</parameter>
    <parameter name="transport.jms.MaxConcurrentConsumers">1</parameter>
    

    (根据您的需要调整这些值)

    此外,如果您将消息发送到后端服务,您可以选择以同步方式发送,使用阻塞=“true”的调用中介:您的代理在收到下一条 jms 消息之前不会出队来自您的后端服务的响应。 另一方面,如果您使用发送中介,它是异步的:您的中介将继续,而另一个线程(回调)等待响应,因此,您的代理将出列下一条 jms 消息

    【讨论】:

    • 谢谢琼。我已经尝试过您提供的属性,但没有运气。我的要求是,我想创建代理 jms 侦听器以每秒读取 10 个请求。我没有看到可以在 jms 代理上设置任何此类属性
    • 在这种情况下,请考虑 Asanka Vithanage 的回答:您的代理服务可以将消息存储在存储中,并且采样消息处理器可以帮助您实现目标。
    【解决方案3】:

    通过设置以下属性,我们可以启用限制或控制发送到后端的消息。

    Proxy level Throttling using JMS

    &lt;parameter name="jms.proxy.throttle.enabled"&gt;true&lt;/parameter&gt; &lt;parameter name="jms.proxy.throttle.limitPerMinute"&gt;3&lt;/parameter&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多