我正在使用ackMode = NONE设置骆驼路线,这意味着不会自动进行确认。如何明确确认路由中的消息?
在我的骆驼路线定义中,我已将ackMode设置为NONE。根据文档,我应该能够手动确认下游消息:
“ AUTO =交换在完成时被确认/不确认。NONE =下游进程必须明确确认/不确认”
但是我不知道如何发送确认。
from("google-pubsub:<project>:<subscription>?concurrentConsumers=1&maxMessagesPerPoll=1&ackMode=NONE")
.bean("processingBean");
我的PubSub订阅的确认截止日期为10秒,因此由于ackMode = NONE,我的消息每10秒不断发送一次。这是预期的。但是,我无法找到一种方法来在处理完成后手动确认消息并停止重新发送。
答案 0 :(得分:0)
我认为最好看看Camel组件如何使用ackMode=AUTO
来实现。拥有look at this class(方法acknowledge
)
但是您为什么要做这项额外的工作?迷上Camel是为了通过抽象掉底层代码来简化集成。
因此,当您使用 ackMode=AUTO
时,骆驼自动提交成功处理的邮件(当邮件成功通过整个路径时)并回滚您无法处理的邮件。
答案 1 :(得分:0)
我能够深入研究Camel组件并弄清楚它是如何完成的。首先,我创建了一个GooglePubSubConnectionFactory
bean:
@Bean
public GooglePubsubConnectionFactory googlePubsubConnectionFactory() {
GooglePubsubConnectionFactory connectionFactory = new GooglePubsubConnectionFactory();
connectionFactory.setCredentialsFileLocation(pubsubKey);
return connectionFactory;
}
然后我能够从标题中引用消息的确认ID:
@Header(GooglePubsubConstants.ACK_ID) String ackId
然后我使用以下代码来确认该消息:
List<String > ackIdList = new ArrayList<>();
ackIdList.add(ackId);
AcknowledgeRequest ackRequest = new AcknowledgeRequest().setAckIds(ackIdList);
Pubsub pubsub = googlePubsubConnectionFactory.getDefaultClient();
pubsub.projects().subscriptions().acknowledge("projects/<my project>/subscriptions/<my subscription>", ackRequest).execute();