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

用ActiveMq可以对Jms消息使用幂等接收器吗

皇甫聪
2023-03-14

我使用WSO2Esb和WSO2DSS在数据库中插入读数,我的插入工作很好,当我从移动端获得请求读数时,我需要200和唯一值的响应,有时插入后连接失败意味着插入结束,但客户端没有得到响应,在这种情况下,移动端客户端再次发送请求,所以我的代理再次将此请求发送到数据库,所以我的数据库每2或3次读数存储重复的值,这对客户端完全不公平,因为我找到了一个使用幂等服务的小解决方案,我们可以找到解决方案吗这个

<!-- The example shows WSO2 ESB acting as an Idempotent Receiver -->
<definitions xmlns="http://ws.apache.org/ns/synapse">
    <proxy name="IdempotencyReceivingProxy">
        <target>
            <inSequence>
                <log level="full"/>
                <!-- Store all messages in an Jmsmemory message store -->
                <store messageStore="MyStore"/>
            </inSequence>
            <outSequence>
                <send/>
            </outSequence>
        </target>           
    </proxy>
    <!-- Further mediation of messages are done in this sequence -->
    <sequence name="next_seq">
        <send>
            <endpoint>
                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
        </send>
    </sequence>
    <messageStore name="MyStore"/>
    <!-- Resequencing Processor takes the next sequence number and hand over to "next_seq" and preserve Idempotency -->
    <messageProcessor
            class="org.apache.synapse.message.processors.resequence.ResequencingProcessor"
            name="ResequencingProcessor" messageStore="MyStore"> 
        <parameter name="interval">2000</parameter>
        <!-- Takes the sequence number using Xpath -->
        <parameter name="seqNumXpath" xmlns:m0="http://services.samples" expression="substring-after(//m0:placeOrder/m0:order/m0:symbol,'-')"/>
        <parameter name="nextEsbSequence">next_seq</parameter>
        <parameter name="deleteDuplicateMessages">true</parameter> 
    </messageProcessor>
</definitions>

为此,我使用了以下链接http://docs.wso2.org/wiki/display/integrationpatterns/idempotent+receiver它适合我的需求吗

共有1个答案

岳玉堂
2023-03-14

我认为这不符合你的要求。重排序处理器所做的是,根据seqnumxpath属性中的数字对消息进行排序。因此,消息应该包括一个数字,您应该使用xpath表达式获得这个数字。当DeletedUpricateMessages参数设置为true时,它将删除序列号与从seqnumxpath参数获得的序列号相同的重复消息。

在您的情况下,可以使用存储和转发方案来防止客户端发送多个请求。在代理服务中将force_sc_accepted属性设置为true,以便始终向客户端返回202响应。然后,消息将被存储在msg存储,并将被转发使用消息处理器。

http://docs.wso2.org/wiki/display/esb470/store+和+forward+使用+JMS+message+storeshttp://wso2.com/library/articles/2011/10/implementing-store-forward-messaging-patterns-wso2esb-part-1

 类似资料:
  • 因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。

  • 我们面临着ActiveMQ及其消费者的随机问题。我们观察到,很少有消费者不接收消息,即使他们连接到ActiveMQ队列。但在消费者重启后,它工作正常。 我们在ActiveMQ端有一个名为testQueue的队列。消费者正试图将消息从该队列中解列。为此,我们正在使用Spring的DefaultMessageListenerContainer。消息正在从ActiveMQ代理传递到使用者节点。从tcpd

  • 我的代码中有一个Spring JmsListener。它接收和消费消息2天,但突然在这2天后,它没有收到来自外部Activemq的消息。然而,它的队列中有一些挂起的消息。当我重置Activemq和消费者时,消费者会收到大量消息。当消息挂起时,连接到Activemq的消费者(代表Spring致动器日志)。日志和配置显示Activemq没有将消息推送给消费者。我有另一个像这个消费者一样的服务从其他队列

  • 如果我创建上面的类并尝试在tomcat7上部署war,我会看到以下错误。

  • 我正在开发一个使用JMS作为消息传递层的应用程序。我还使用glassfish来托管jms/mq后端。该应用程序能够使用我最初设置的glassfish 3.1服务器中的连接工厂和主题进行发布/订阅消息传递。我现在有了glassfish (4.1)的另一个实例,它托管了一组新的应用程序使用的新功能,但是我仍然需要使用第一个glassfish服务器广播的消息。事实上,客户端使用特定于glassfish