【问题标题】:Create thread and route message from Camel to microservice and back创建线程并将消息从 Camel 路由到微服务并返回
【发布时间】:2020-12-08 19:14:56
【问题描述】:

我正在将 Camel 与 JMS 和 Spring Boot 结合使用,并希望为下一个场景构建路线:

用户 1(MQTT 客户端)向 ActiveMQ Artemis 发送消息(主题)。 Camel(通过使用 from)捕获该消息并在日志的帮助下将其打印出来。

我想做的是 - 为捕获的消息创建一个新线程(异步)。将该消息从 Camel 发送到微服务(python 程序),该微服务应该获取消息并插入一些额外的字符串,然后将更改的消息发送回 Camel 和 ActiveMQ。 最后,来自 ActiveMQ 的更改消息将发送给用户 2。

你能给我一些方向或路线示例,说明如何做这样的事情吗?

因此,关键是为每条消息创建新线程并创建往返该微服务的路由。

【问题讨论】:

    标签: spring-boot apache-camel jms microservices


    【解决方案1】:

    路线可能是这样的

    from("jms:queue:inputQueue")
        .log("${body}")
        .to("http://oldhost")
        .to("jms:queue:outputQueue")
    

    一些注意事项:

    • 您可以使用.to() 调用下游HTTP 端点。当前消息正文用作请求正文。服务的响应会覆盖消息正文。
    • 我不知道您为什么要为同步调用创建一个新线程。您可以通过与多个消费者并行使用来自 Artemis 的多条消息来利用并行处理。像这样,每条消息都在自己的线程中处理。如果你的动机是韧性,Camel 中还有一个Circuit Breaker EIP
    • 如果您使用 Camel 2.x,请使用 HTTP4 Component ("http4://") 以使用较新的 HTTP 客户端库。在 Camel 3.x 中,旧的被删除了,新的被简单地称为HTTP component

    【讨论】:

    • 我写错了。应该是从 jms:(async) 到 direct:(sync) 等等...谢谢提供信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多