Camel RabbitMQ请求响应模式示例

时间:2015-02-25 09:51:02

标签: design-patterns request apache-camel rabbitmq response

我正在寻找使用Camel RabbitMQ请求响应模式的示例代码。

我的用例: - 请求消息在RabbitMQ队列中释放 - Camel路由使用消息,调用外部Web服务,并根据消息的回复属性回复响应

我也使用Spring AMQP实现了这个用例,但我也希望用Camel RabbitMQ来实现。

Camel文档:http://camel.apache.org/rabbitmq.html

感谢您的帮助。

阿诺

2 个答案:

答案 0 :(得分:1)

我找到了解决方案:

Camel RabbitMQ回复功能将在下一个Camel版本2.15中。

比照。 https://issues.apache.org/jira/browse/CAMEL-7860

阿诺

答案 1 :(得分:0)

这是HTTP代理的一个简单示例。 HTTP请求通过Rabbit MQ传递,HTTP响应返回给Rabbit MQ。

写在骆驼2.17.1上的例子(camel-core,camel-netty4-http,camel-rabbitmq)

示例电话:

curl -H“proxy_url:http://remotehost:port/uri”127.0.0.1

    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {

            from("netty4-http:localhost:80").
                    to("rabbitmq://localhost:5672/async");

            from("rabbitmq://localhost:5672/async").
                    process(exchange -> {

                        // for return not only 200 HTTP STATUS
                        String techParams = "throwExceptionOnFailure=false";
                        String proxyUrl = (String) exchange.getIn().getHeader("proxy_url");

                        proxyUrl = proxyUrl.contains("?") && proxyUrl.contains("=") 
                                ? proxyUrl + "&" + techParams : proxyUrl + "?" + techParams;
                        exchange.getIn().setHeader("proxy_url", proxyUrl);

                        exchange.setProperty(RabbitMQConstants.CORRELATIONID, 
                                exchange.getIn().getHeader(RabbitMQConstants.CORRELATIONID));

                    }).
                    toD("netty4-http:${header.proxy_url}").
                    process(exchange -> {
                        exchange.getIn().setHeader(RabbitMQConstants.CORRELATIONID, exchange.getProperty(RabbitMQConstants.CORRELATIONID));
                    });
        }

    });