- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Fabric8 379 构建。
目前正在努力使用 ActiveMQ 和 Camel 让 TransactionErrorHandler 的预期行为按预期工作。
首先根据 Camel 错误处理程序文档(http://camel.apache.org/error-handler.html),如果我按照建议调用 TransactionErrorHandler,即
<errorHandler id="txEH" type="TransactionErrorHandler">
<redeliveryPolicy logStackTrace="false" logExhausted="false" maximumRedeliveries="3"/>
</errorHandler>
我得到一个错误:
Caused by: org.xml.sax.SAXParseException: cvc-enumeration-valid: Value 'TransactionErrorHandler' is not facet-valid with respect to enumeration '[DeadLetterChannel, DefaultErrorHandler, NoErrorHandler, LoggingErrorHandler]'. It must be a value from the enumeration.
这很公平,我想 TransactionErrorHandler 已从模式中删除并且必须以不同方式调用?因此,如果我采用替代路线并像这样指定一个 TransactionErrorHandler bean:
<bean id="transactionErrorHandler"
class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
<property name="deadLetterUri" value="activemq:queue:ActiveMQ.DLQ" />
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
</bean>
<bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
<property name="backOffMultiplier" value="2" />
<property name="maximumRedeliveries" value="2" />
<property name="redeliveryDelay" value="1000" />
<property name="useExponentialBackOff" value="true" />
</bean>
我可以通过指定 errorHandlerRef="transactionErrorHandler"在我的 route 成功使用它。但是,在测试此场景时,将完全忽略重新传递策略,重新传递尝试次数为 6 次(默认),而不是上面指定的 2 次。我希望有人能为我指出正确的方向,说明如何在路由中正确指定 TransactionErrorHandler。下面是我当前的测试 blueprint.xml,它被部署到一个结构上:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd">
<!-- blueprint property placeholders -->
<cm:property-placeholder id="test-adapter" persistent-id="uk.test.transactions">
<cm:default-properties>
<cm:property name="amqBrokerURL" value="discovery:(fabric:platform)" />
<cm:property name="amqBrokerUserName" value="admin" />
<cm:property name="amqBrokerPassword" value="admin" />
</cm:default-properties>
</cm:property-placeholder>
<camelContext xmlns="http://camel.apache.org/schema/blueprint" id="TestRouteContext" useMDCLogging="true">
<!-- <errorHandler id="txEH" type="TransactionErrorHandler">
<redeliveryPolicy logStackTrace="false"
logExhausted="false" />
</errorHandler> -->
<route id="platform-test-route" errorHandlerRef="txEH">
<from uri="activemq:queue:test-queue-in" />
<transacted ref="transactionPolicy" />
<!-- Basic Bean that logs a message -->
<bean ref="stubSuccess" />
<!-- Basic Bean that throws a java.lang.Exception-->
<bean ref="stubFailure" />
<to uri="activemq:queue:test-queue-out" />
</route>
</camelContext>
<bean id="stubSuccess" class="uk.test.transactions.stubs.StubSuccess" />
<bean id="stubFailure" class="uk.test.transactions.stubs.StubFailure" />
<bean id="transactionErrorHandler"
class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
<property name="deadLetterUri" value="activemq:queue:ActiveMQ.DLQ" />
<property name="redeliveryPolicy" ref="redeliveryPolicy" />
</bean>
<bean id="transactionPolicy" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="jmsTransactionManager" />
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
</bean>
<bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="jmsPooledConnectionFactory" />
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="connectionFactory" ref="jmsPooledConnectionFactory" />
<property name="transacted" value="true" />
<property name="transactionManager" ref="jmsTransactionManager" />
<property name="cacheLevelName" value="CACHE_CONSUMER" />
</bean>
<bean id="jmsPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
init-method="start" destroy-method="stop">
<property name="maxConnections" value="1" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<!-- <bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="backOffMultiplier" value="2" />
<property name="initialRedeliveryDelay" value="2000" />
<property name="maximumRedeliveries" value="2" />
<property name="redeliveryDelay" value="1000" />
<property name="useExponentialBackOff" value="true" />
</bean> -->
<bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
<property name="backOffMultiplier" value="2" />
<property name="maximumRedeliveries" value="2" />
<property name="redeliveryDelay" value="1000" />
<property name="useExponentialBackOff" value="true" />
</bean>
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${amqBrokerURL}" />
<property name="userName" value="${amqBrokerUserName}" />
<property name="password" value="${amqBrokerPassword}" />
<property name="watchTopicAdvisories" value="false" />
<!-- <property name="redeliveryPolicy" ref="redeliveryPolicy" /> -->
</bean>
</blueprint>
如果有人能看出我哪里出错了,将不胜感激。
最佳答案
当您使用 TX 时,您应该在 AMQ 经纪人上配置重新交付选项,它是负责重新交付的经纪人(而不是 Camel)。
关于java - Camel/ActiveMQ 事务、重新交付和 DLQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303048/
我试图修改Logstash 7.6,以便将失败的消息发送到SQS DLQ [1]。具体来说,当Logstash使用SQS输入插件和elasticsearch输出插件时,我需要进行此修改。我在过滤器部分
有谁知道如何从 jBoss 中清除 DeadLetterQueue? 当我启动 jBoss 时,它在以下位置等待 4 分钟: 12:09:06,281 INFO [ConnectionFactory
我正在使用以下服务器端重新传递配置
private BrokerService createBroker() throws IOException, Exception { BrokerService broker =
作为操作人员(不是开发人员)并基于 http://activemq.apache.org/message-redelivery-and-dlq-handling.html我试图在集成到 JBoss F
关于允许应用程序拒绝什么样的消息,是否有一个好的最佳实践? 我的理解是所有无法处理的消息都应该被拒绝到死信队列 - 无论问题是消息中的语法错误还是语义错误,或者应用程序是否暂时无法处理消息(例如,因为
我们有一个外部 SB 主题订阅,我们是其消费者。我们当前正在读取最大并发线程数为 20 的 SB。 我想知道偶尔耗尽 DLQ 的最佳方法是什么?它应该包含在同一个应用程序中还是我应该创建另一个应用程序
我最近开始研究目前在我们的项目中使用的 Azure 服务总线模块。当前的模型是,我们向一个主题发送消息,并且该主题有多个订阅。订阅没有过滤器,订阅者使用它(当前不打算添加过滤器)。 问题:假设有 1
我正在使用 AMQ 5.5。我想禁用将死信发送到 ActiveMQ.DLQ 目的地的选项,并完全丢弃(自动)否则将发送到那里的消息。为此,我按如下方式配置了代理:
我们将 spring jms 与 activeMQ 一起使用,我们想重命名 DLQ。这背后的原因是我们有几个项目,我们希望每个项目都有一个单独的 DLQ。 到目前为止,我只看到了如何设置单独的 DLQ
我有一个触发 Lambda 的 DynamoDB 流,我想将任何失败的事件推送到 DLQ。 如果 DLQ 的源是 SQS 队列,看起来您可以执行称为重新驱动回源队列的操作,DLQ 中的消息将被移回源队
当本地队列管理器在其 AMQ 错误日志中收到以下消息时: 09/13/12 08:00:19 - Process(3017.20) User(mqm) Program(amqrmppa_nd) AMQ
Azure 服务总线实体(队列/主题)支持生存时间 (TTL)。当 TTL 过去时,消息就会过期。到期时,系统会删除该消息或将其移至死信队列 (DLQ)。 服务总线是否有其他设置可以在指定时间段后从
当消息传递到 Azure 服务总线死信队列时,我尝试发送邮件警报。我没有找到任何合适的解决方案来发送邮件警报。我们可以在 azure 还是 .net core 的哪一侧处理这个问题?如果是这样,任何人
我已经设置了 dlq 和 dlx,但是失败的消息没有重定向到 dlq。我正在尝试从 java 应用程序以及从 rabbitmq 服务器向 MESSAGES.EXCHANGE 发送消息,在这两种情况下我
Azure 队列存储和 Azure 服务在死信队列和有害消息方面有何区别? 如何从这些队列中读取消息? 最佳答案 有害消息是发送到队列或主题但消费应用程序无法正确处理的消息。 一旦DeliveryCo
当消息传递到 Azure 服务总线死信队列时,我尝试发送邮件警报。我没有找到任何合适的解决方案来发送邮件警报。我们可以在 azure 还是 .net core 的哪一侧处理这个问题?如果是这样,任何人
我已经设置了 dlq 和 dlx,但是失败的消息没有重定向到 dlq。我正在尝试从 java 应用程序以及从 rabbitmq 服务器向 MESSAGES.EXCHANGE 发送消息,在这两种情况下我
Azure 队列存储和 Azure 服务在死信队列和有害消息方面有何区别? 如何从这些队列中读取消息? 最佳答案 有害消息是发送到队列或主题但消费应用程序无法正确处理的消息。 一旦DeliveryCo
我必须使用 JMS API 处理死信队列 (DLQ) 中的消息。目标是读取原始消息的正文及其用户属性。我意识到这种 DLQ 处理方法可能被认为是糟糕的设计,但无论如何我都必须处理它。 使用 JMS 读
我是一名优秀的程序员,十分优秀!