在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 。
我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本)。 在此示例中,我使用了Mule ESB 3.4.2和ActiveMQ 5.9.0。 我们可以基于以下pom文件创建一个简单的Mule项目:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.pascalalma.demo</groupId><artifactId>activemq-test-flow</artifactId><packaging>mule</packaging><name>${project.artifactId}</name><version>1.0.0-SNAPSHOT</version><properties><mule.version>3.4.2</mule.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><jdk.version>1.7</jdk.version><junit.version>4.9</junit.version><activemq.version>5.9.0</activemq.version></properties><dependencies><!-- Mule Dependencies --><dependency><groupId>org.mule</groupId><artifactId>mule-core</artifactId><version>${mule.version}</version></dependency><!-- Mule Transports --><dependency><groupId>org.mule.transports</groupId><artifactId>mule-transport-jms</artifactId><version>${mule.version}</version></dependency><dependency><groupId>org.mule.transports</groupId><artifactId>mule-transport-vm</artifactId><version>${mule.version}</version></dependency><!-- Mule Modules --><dependency><groupId>org.mule.modules</groupId><artifactId>mule-module-client</artifactId><version>${mule.version}</version></dependency><dependency><groupId>org.mule.modules</groupId><artifactId>mule-module-scripting</artifactId><version>${mule.version}</version></dependency><!-- for testing --><dependency><groupId>org.mule.tests</groupId><artifactId>mule-tests-functional</artifactId><version>${mule.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client</artifactId><version>${activemq.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>${jdk.version}</source><target>${jdk.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.5</version><configuration><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin><plugin><groupId>org.mule.tools</groupId><artifactId>maven-mule-plugin</artifactId><version>1.9</version><extensions>true</extensions><configuration><copyToAppsDirectory>false</copyToAppsDirectory></configuration></plugin></plugins></build>
</project>

这里没有什么特别的。 除了必要的依赖关系之外,我还添加了maven-mule-plugin,以便可以创建“ mule”打包类型并从IDE运行Mule。
有了此Maven pom,我们可以创建以下两个Mule配置。 一个用于测试交易的Mule流:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core"xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"version="EE-3.4.1"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsdhttp://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd"><flow name="MainFlow"><inbound-endpoint ref="event-queue" /><logger category="net.pascalalma.demo.MainFlow" level="INFO" message="Received message from activeMQ" /><scripting:component><scripting:script engine="Groovy">throw new Exception('Soap Fault Response detected')</scripting:script></scripting:component><outbound-endpoint ref="result-queue" /></flow>
</mule>

在此流程中,我们从入站端点接收到一条消息,记录一条消息并引发异常,然后将该消息放入下一个队列。 如我们所见,我没有添加任何异常处理程序。 端点和连接器的配置如下所示:

<?xml version="1.0" encoding="UTF-8"?><mule xmlns="http://www.mulesoft.org/schema/mule/core"xmlns:jms="http://www.mulesoft.org/schema/mule/jms"xmlns:spring="http://www.springframework.org/schema/beans"version="EE-3.4.1"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsdhttp://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd"><spring:bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy"><spring:property name="maximumRedeliveries" value="5"/><spring:property name="initialRedeliveryDelay" value="500"/><spring:property name="maximumRedeliveryDelay" value="10000"/><spring:property name="useExponentialBackOff" value="false"/><spring:property name="backOffMultiplier" value="3"/></spring:bean><!-- ActiveMQ Connection factory --><spring:bean id="amqFactory" class="org.apache.activemq.ActiveMQConnectionFactory" lazy-init="true"><spring:property name="brokerURL" value="tcp://localhost:61616" /><spring:property name="redeliveryPolicy" ref="redeliveryPolicy" /></spring:bean><jms:activemq-connector name="activeMqConnector"connectionFactory-ref="amqFactory"persistentDelivery="true"numberOfConcurrentTransactedReceivers="2"specification="1.1" /><jms:endpoint name="event-queue" connector-ref="activeMqConnector" queue="event-queue" ><jms:transaction action="ALWAYS_BEGIN" /></jms:endpoint><jms:endpoint name="result-queue" connector-ref="activeMqConnector" queue="result-queue" ><jms:transaction action="ALWAYS_JOIN" /></jms:endpoint>
</mule>

我为ActiveMQ连接工厂定义了一个Spring bean,并为该工厂的重新交付策略定义了一个Spring bean。 使用此重新分发策略,我们可以配置当原始尝试失败时,Mule应该重试处理队列中消息的频率。 重新交付策略中的一个不错的功能是“ backOffMultiplier”和“ useExponentialBackOff”组合。 使用这些选项,您可以使两次重新交付尝试之间的间隔成倍增加,直到达到'maximumRedeliveryDelay'。 在那种情况下,M子将等待“ maximumRedeliveryDelay”等待下一次尝试。

因此,使用这些配置,我们可以创建一个Mule测试类并运行它。 测试类如下所示:

package net.pascalalma.demo;import org.junit.Test;
import org.mule.DefaultMuleMessage;
import org.mule.api.MuleMessage;
import org.mule.module.client.MuleClient;
import org.mule.tck.junit4.FunctionalTestCase;public class TransactionFlowTest extends FunctionalTestCase {@Overrideprotected String getConfigResources() {return "app/test-flow.xml, app/test-endpoints.xml";}@Testpublic void testError() throws Exception {MuleClient client = new MuleClient(muleContext);MuleMessage inMsg = new DefaultMuleMessage("<txt>Some message</txt>", muleContext);client.dispatch("event-queue", inMsg);// Give Mule the chance to redeliver the messageThread.sleep(4000);}
}

如果我们运行此测试,您将在日志中看到如下消息:

Exception stack is:
1. "Message with id "ID:Pascals-MacBook-Pro-2.local-59158-1406440948059-1:1:3:1:1" has been redelivered 3 times on endpoint "jms://event-queue", which exceeds the maxRedelivery setting of 0 on the connector "activeMqConnector". Message payload is of type: ActiveMQTextMessage (org.mule.transport.jms.redelivery.MessageRedeliveredException)org.mule.transport.jms.redelivery.JmsXRedeliveryHandler:87 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/transport/jms/redelivery/MessageRedeliveredException.html)

如果现在我们切换到ActiveMQ控制台 ,可以通过http:// localhost:8161进行默认本地安装,则可以看到以下队列:
不出所料,我们看到正在创建两个队列,事件队列为空,默认的ActiveMQ.DLQ包含我们的消息:

正如您可以想象的那样,为每个队列使用一个特定的DLQ而不是一个包含各种无法传递的消息的DLQ可能很方便。 幸运的是,这很容易在ActiveMQ中配置。 只需将以下内容放在“ $ ACTIVEMQ_HOME / conf”文件夹中的“ activemq.xml”文件中。

<!-- Set the following policy on all queues using the '>' wildcard -->
<policyEntry queue=">"><deadLetterStrategy><individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" /></deadLetterStrategy>
</policyEntry>

如果现在重新启动ActiveMQ,请删除现有队列并重新运行测试,我们将看到以下结果:
因此,使用此设置,每个队列都有自己的DLQ。 有关这些ActieMQ设置的更多选项,请参见此处 。 通过本文中创建的Mule流,可以轻松测试和使用这些设置。

翻译自: https://www.javacodegeeks.com/2014/07/mule-esb-activemq-and-the-dlq.html

Mule ESB,ActiveMQ和DLQ相关推荐

  1. mule和activemq_Mule ESB,ActiveMQ和DLQ

    mule和activemq 在本文中,我将展示一个简单的Mule ESB流程,以了解实际中使用的Active MQ 的DLQ功能 . 我假设您有一个正在运行的Apache ActiveMQ实例(如果没 ...

  2. mule_Mule ESB,ActiveMQ和DLQ

    mule 在本文中,我将展示一个简单的Mule ESB流程,以了解Active MQ的DLQ功能.我假设您有一个正在运行的Apache ActiveMQ实例(如果没有,则可以在此处下载一个版本). 在 ...

  3. mule esb java实例_Java轻量级消息框架和整合平台mule ESB应用实例分享

    1,Mule主要有三个核心组件:传输器transport.路由器router.转换器transformer: 2,transport负责在应用之间传递消息,router负责指导消息的传递路径,tran ...

  4. Mule ESB 介绍

    1. 简介 Mule ESB是一个基于Java的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换.Mule ESB支持集成现有系统而无论其底层采用何种技术,如J ...

  5. MULE ESB中custom,flows,connectors等的使用方法

    1. how to work 当你去检查一个消息在mule esb当中 是如何流动的时候,你回发现整个架构中存在着三个层面:应用层,整合层,以及传输层.. 同样,在mule 开发中也有三种不同类型任务 ...

  6. Mule ESB 3.3与CloudHub

    MuleSoft最近发布了企业服务总线(ESB)产品Mule ESB 3.3.在新版本中,除了应用程序集成之外,Mule ESB还拥有了数据集成功能:从而为开发者提供了一个面向本地或云端应用的集成解决 ...

  7. 关于MULE ESB相关的介绍

    1. 简介 Mule ESB是一个基于Java的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换.Mule ESB支持集成现有系统而无论其底层采用何种技术,如J ...

  8. MULE ESB简介

    Mule ESB是一个轻量级的.开源的.基于Java的ESB(Enterprise Services Bus)和企业应用集成平台.它能够让企业开发人员快速地.简便地集成多个应用程序,无论这些应用程序是 ...

  9. MULE ESB中的一些值得关注的地方

    Mule框架提供了一个可升级的环境,可以把自己的业务组件部署在里面.Mule管理所有组件之间的交互,不管它们是在同一个虚拟机中还是在internet上,也不管底层使用的传输方式. Mule围绕着企业服 ...

最新文章

  1. 「学习笔记-Linux」学习Shell Script
  2. 本科理工男如何学习Linux
  3. 【深度学习】弱/半监督学习解决医学数据集规模小、数据标注难问题
  4. 跳出小程序 video组件 卡顿、黑屏、全屏等坑
  5. 利用Struts拦截器限制上传图片的格式和大小
  6. mybatis必知必会一
  7. 基于JFinal框架开发的企业办公系统-JFinalOA v1.1源码
  8. zynq配置成jtag模式_zynq 7Z010的启动模式配置
  9. 本想制衡经销商价格,不料成为黄牛货源地!茅台电商公司被迫解散!
  10. qcustomplot圆_QCustomPlot使用心得五:坐标轴常用属性设置
  11. html整体移动,html 可以拖动多个div
  12. 解决matlab2019b中文乱码问题
  13. Win7如何简单的关闭445端口及445端口入侵详解
  14. windows背景豆沙绿设置
  15. 【PM】1.2 认识产品经理 产品经理能力模型
  16. php检查数据库记录,php-检查数据库中是否有新条目
  17. MATLAB(SimMechanics)机器人可视化运动仿真-关节位置控制篇
  18. P4942 小凯的数字
  19. pgr_createTopology正运行时卡死的解决
  20. shell怎么使用制表符_shell中vi替换特殊字符(制表符\t等)的方法

热门文章

  1. 对查询出来的结果进行筛选(having)
  2. 亲身体验Intellij Idea从卡顿到顺畅
  3. FE助手 json格式化 reslet client
  4. 海南计算机网络技术学校,三亚广播电视大学计算机网络技术专业_海南报名_网络教育计算机网络技术专业教学计划_中国教育在线...
  5. 处理api返回的数据_API 乐队指挥家,网关服务正式上线
  6. stomp 连接错误: Whoops! Lost connection to http://localhost:8080/spring13/stomp 的解决方法
  7. datagrid获取页面总记录数的方法,datagrid获取页面总记录数为0的解决方法
  8. log4j2自动删除_登录样式:log4j 2,上下文,自动清除…全部不附带任何字符串!...
  9. jax-rs/jersey_JAX-RS 2.1的Jersey客户端依赖性
  10. oracle idm_批准Oracle IDM中的特定Web服务