我正在使用带有ActiveMQ的Apache Camel,并希望实现有保证的消息传递。
我一直在阅读Camel in Action一书和Apache Camel Developer's Cookbook。
我希望这里有人能在我的方法上给我一些建议。我不是要代码样本。
我设想的实现方式如下所示:
1. Message is received on an endpoint
2. I inspect the message
3. I use the Wiretap pattern to drop it immediately on my "GuaranteedMessages"
我们使用MSMQ和一个处理消息的集成机制。此机制在事务上下文中分析和验证每个消息,如果验证失败,则发生回滚,并将消息传递回队列。此外,集成机制等待20秒以再次处理错误消息。
问题是这种方法会导致错误消息被一遍又一遍地处理,即使我们清理了队列。我们也尝试过清理缓存,但也没有结果。
有谁有线索吗?
使用调用代码更新
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//message validation function
servicoIntegraca
我有一个活动队列,它将包含来自Publisher的所有消息。根据消息处理结果,我的使用者读取这些消息和Acks/Nacks。
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
var processed = ProcessMessage(message)
if (processed)
在MSMQ队列中发现了一个与有毒消息有关的奇怪问题。当检测到有毒消息时,我使用下面的代码来处理异常并将消息移动到有毒队列,但这失败了,因为即使我从抛出的异常中获得消息的lookupId,也找不到该消息。请参考下面的相关代码。
public bool HandleError(Exception error)
{
var poisonException = error as MsmqPoisonMessageException;
if (null == poisonException) return false;
var lookupId = poisonExceptio
我最近开始使用AWS,我的第一项工作是使用lambda函数使用SQS队列。 我知道我不需要调用receiveMessage,因为lambda函数已经在这里接收消息了: exports.handler = async(event, context) => {
let i = 0;
for (const record of event.Records) {
...
}
}; 我的问题是:我应该为收到的每条消息调用sqs.deleteMessage吗?我知道lambda函数会自动删除已处理的消息,但一位朋友告诉我,我仍然需要手动调用deleteMessage,因为如果发生错误,如果我不手动