Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何从ApacheCammel路由接收到Spring引导控制器的响应_Spring_Spring Boot_Apache Camel - Fatal编程技术网

我如何从ApacheCammel路由接收到Spring引导控制器的响应

我如何从ApacheCammel路由接收到Spring引导控制器的响应,spring,spring-boot,apache-camel,Spring,Spring Boot,Apache Camel,通过使用consumertemplate将数据从路由发送到endpointdirect:receive,我在控制器中接收相同的数据,但错误如下 [骆驼(骆驼-1)线#1- JmsConsumer[MQT.EI.PRD2X4_PRODUCER_UT.REPLY.Q1]]错误 o、 a.c.processor.DefaultErrorHandler.log-为的传递失败 (消息ID:ID:C3E2D840D4D8E3F1404040400D85C2573B4CF7342打开 交换ID:ID-APIN

通过使用consumertemplate将数据从路由发送到endpointdirect:receive,我在控制器中接收相同的数据,但错误如下

[骆驼(骆驼-1)线#1- JmsConsumer[MQT.EI.PRD2X4_PRODUCER_UT.REPLY.Q1]]错误 o、 a.c.processor.DefaultErrorHandler.log-为的传递失败 (消息ID:ID:C3E2D840D4D8E3F1404040400D85C2573B4CF7342打开 交换ID:ID-APINP-ELPT60235-1597255599355-0-5)。筋疲力尽 传递尝试:1捕获: org.apache.camel.component.direct.DirectConsumerNotAvailableException: 终结点上没有可用的使用者:direct://recive. 交易所[ID-APINP-ELPT60235-1597255599355-0-5]

是否有人能就如何从控制器的路径获取响应数据给出建议

控制器代码:

@Autowired
    private CamelContext camelContext;
    @Autowired
    private ProducerTemplate producer;
    @Autowired
        ConsumerTemplate consumer;

    @PostMapping("/request-reply")
    public String requestReplyMapping(@RequestBody String inputReq) {

        Exchange exchangeRequest = ExchangeBuilder.anExchange(camelContext).withBody(inputReq).build();
        Exchange exchangeResponse = producer.send("direct:request-reply", exchangeRequest);

        Exchange receive = consumer.receive("direct:receive"); //receiving data from this endpoint
        return null;

    }
@Component
public class RequestReplyRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("direct:request-reply").
        to("jms:RequestQueue?ReplyTo=ResponseQueue&exchangePattern=InOut")
        .log("Request-reply Body is  ${body}   and header info is   ${headers}  ");

        from("jms:ResponseQueue")
        .log("Received Body is  ${body}   and header info is   ${headers}  ")
        .to("direct:receive"); // sending data to the endpoint
    }

}
路线代码:

@Autowired
    private CamelContext camelContext;
    @Autowired
    private ProducerTemplate producer;
    @Autowired
        ConsumerTemplate consumer;

    @PostMapping("/request-reply")
    public String requestReplyMapping(@RequestBody String inputReq) {

        Exchange exchangeRequest = ExchangeBuilder.anExchange(camelContext).withBody(inputReq).build();
        Exchange exchangeResponse = producer.send("direct:request-reply", exchangeRequest);

        Exchange receive = consumer.receive("direct:receive"); //receiving data from this endpoint
        return null;

    }
@Component
public class RequestReplyRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("direct:request-reply").
        to("jms:RequestQueue?ReplyTo=ResponseQueue&exchangePattern=InOut")
        .log("Request-reply Body is  ${body}   and header info is   ${headers}  ");

        from("jms:ResponseQueue")
        .log("Received Body is  ${body}   and header info is   ${headers}  ")
        .to("direct:receive"); // sending data to the endpoint
    }

}

您不需要一个consumerTemplate来完成您的尝试。默认情况下,Direct组件的交换模式为InOut。因此,您可以使用
exchangereresponse
变量在处理骆驼路线后获取交换

骆驼路线:

from("direct:start")
.log("${body} in stat")
.transform().simple("text")
.to("direct:nextRoute");

from("direct:nextRoute")
.log("${body} in nextRoute");
休息控制器:

public class RestController{

    final static String CAMEL_START_URI ="direct:start";

    @Autowired
    CamelContext camelContext;

    @Autowired
    @EndpointInject(uri=CAMEL_START_URI)
    ProducerTemplate producer;

    @PostMapping(value = "/request")
    public String requestMapping(@RequestBody String inputReq) {
        
        Exchange sendExchange = ExchangeBuilder.anExchange(camelContext).withBody(inputReq).build();
        Exchange outExchange = producer.send(sendExchange);
        String outString = outExchange.getMessage().getBody(String.class);
        System.out.println(outString); //this will have a value of "text" since I am setting the body as "text" in the second route
        return outString; 
    }

}

我很感激你的时间,但我仍然面临其他问题,请你检查一下好吗