2016-10-20 60 views
0

有人可以让我知道如何使用camel-redis来确保交付吗?使用Redis的骆驼保证交付

我的使用情况是类似如下: -

from("jetty:http://localhost:8888/hello").to("redis://...") 

一旦消息被写入Redis的发送成功响应HTTP客户端,使客户端不会阻塞等待响应。

然后在另一个途径我要处理来自Redis的消息像下面,然后从Redis的删除它时,处理成功

from("redis://...").to(...) 
+0

好方法 - 它被称为“存储和转发”模式。请参阅http://redis.io/commands/rpoplpush。实施该模式的问题有多严重? – gusto2

+0

如何在路径'from(“redis://”)。(...)。(...)'中读取redis消息后出现错误,并且消息未传递到最后的目的地?如何将消息添加回原始列表? – tuk

+0

如果我正在使用BRPOPLPUSH,并且没有确认超时的信息,请将消息从目标列表中移回原始列表。如果有确认删除该消息。你能建议什么是最好的方式来实现这个使用java dsl? – tuk

回答

1

好方法 - 它被称为“存储转发”模式。

并且消息没有传递到最终目的地?

那么 - 那么“try/catch”呢?尝试发送消息,如果失败,只需将其放回到redis。目的地,重试次数,重试periode和死信队列等

使用任何简单的店:

通常这种模式是利用消息(JMS),其中消息是有一些重要的功能实现(redis,jdbc,...)你必须自己实现这些消息传递功能。 (我必须管理我对Redis不太好,但使用简单的JDBC作为消息存储库也带来同样的问题)。

至少添加重试计数和“下一个送货时间戳”。当邮件未在预定义计数后发送时发生什么 - 取决于您 - 发送邮件,写入日志,停止世界......

+0

是的'尝试/赶上'在那里。我在询问有关骆驼实例在阅读redis消息后发生故障的情况。 – tuk

+1

如果端点(redis,http)不完全是事务性的。在这种情况下,你将没有任何完美的解决方案,你将不得不妥协。只有在服务调用成功时,才能使用redis transaction命令或删除redis对象。在后一种情况下,远程服务应该是幂等的。 – gusto2