首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camel、Akka、JMS和延迟消息确认:我可以向代理确认以前处理过的消息吗?

Camel、Akka、JMS和延迟消息确认:我可以向代理确认以前处理过的消息吗?
EN

Stack Overflow用户
提问于 2016-03-24 09:53:50
回答 1查看 347关注 0票数 1

我使用的是Akka (最新的稳定版本)、akka-camel和JMS (为了这段对话的目的,假设它是ActiveMQ,但理想情况下,解决方案应该是通用的)。

用例

我有下面的用例。在队列Q上,我收到如下消息:

代码语言:javascript
复制
time:   1     2    3    4    5    6

      | A1 | B1 | C1 | C2 | A2 | B2 | .... 
         ^                        ^
       first                     latest

我的最终目标是在(A1,A2)(B1,B2)等中将它们组合在一起;尽管重复消息和未传递消息等复杂问题仍然存在,但复杂的是,我必须确保,在匹配完整的消息并对其进行处理之前,代理将保留所有未确认的消息。

示例

C2,我接收和处理了4条消息,并成功地对(C1, C2)进行了处理,但是我仍然不能向代理确认任何消息,因为A1B1仍然是无与伦比的和悬而未决的,而在JMS to received 中,意思是向(C1, C2)确认所有消息。事实上,我可以返回的第一个确认是在5接收到A2时发出的:此时我可以确认A1 (只有A1,因为B1仍在等待)。

问题所在

现在,我似乎不知道如何通过akka-camel实现这种延迟和异步确认。我一直在网上阅读,虽然我可以找到关于如何手动确认消息(文档示例)的解释,但没有任何东西显示如何向代理确认先前处理过的消息。

代码语言:javascript
复制
import akka.camel.{ CamelMessage, Consumer }
import akka.camel.Ack
import akka.actor.Status.Failure

class Consumer3 extends Consumer {
  override def autoAck = false

  def endpointUri = "jms:queue:test"

  def receive = {
    case msg: CamelMessage =>
      sender() ! Ack
      // on success
      // ..
      val someException = new Exception("e1")
      // on failure
      sender() ! Failure(someException)
  }
}

在这种情况下,Ack是一个object,它的语义是真正的:--我承认当前的消息,而我需要的是类似消息X现在确认的,其中X是以前的消息,但不一定是当前的消息。

这个用例是通过akka-camel支持或支持的,还是应该自己构建呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-03-24 11:53:33

听起来你想要的是activemq的承认

遗憾的是,INVIDUAL_ACKNOWLEDGE不是JMS的一部分,但根据 post的说法,它在每个队列的基础上被广泛采用。(我还没查过)

因为它不是在规格,阿克卡不支持它的盒子,但它肯定会作出很好的贡献!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36197316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档