当前位置: 首页 > 知识库问答 >
问题:

HTTP请求后从Camel确认AMQ

亢嘉茂
2023-03-14

我使用ApacheCamel在ActiveMQ和camel HTTPendpoint之间进行路由。路由的定义方式是,将数据从camel cxf webservice传输到ActiveMQ,并将这些数据发送到tomcat,tomcat是一个HTTPendpoint,然后一旦HTTP uri命中,camel就会从tomcat服务器获得响应。

只有在成功路由后,我们才能从骆驼那里确认队列,我的意思是在LOG_log_4过程完成后确认AMQ吗?如果这是可能的,那么我可以在队列中没有任何数据丢失的情况下进行路由,即使超文本传输协议链路中断了。

我发现这个链接JMSACKNOWLEDGE_MODE。如果我需要使用确认模式CLIENT_ACKNOWLEDGE那么我需要在tomcat网络应用网站上写消费者服务来确认msg收到成功。

我使用Acknowledgemodename作为自动确认。

详细路线图如下:-

Spring DSL应用程序上下文。xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:camel="http://camel.apache.org/schema/spring"
    xmlns:cxf="http://camel.apache.org/schema/cxf"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:osgi="http://www.springframework.org/schema/osgi"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/osgi       http://www.springframework.org/schema/osgi/spring-osgi.xsd       http://camel.apache.org/schema/spring       http://camel.apache.org/schema/spring/camel-spring.xsd       http://cxf.apache.org/jaxrs       http://cxf.apache.org/schemas/jaxrs.xsd       http://camel.apache.org/schema/cxf       http://camel.apache.org/schema/cxf/camel-cxf.xsd">
    <cxf:rsServer address="http://localhost:9000/employeeservice"
        id="restService" serviceClass="com.javainuse.beans.EmployeeServiceResource"/>
    <bean class="com.javainuse.beans.CamelProcessor" id="processor"/>
    <bean class="com.javainuse.beans.CamelAMQResponseProcessor" id="camelAMQResponseProcessor"/>
    <camelContext id="camelId" xmlns="http://camel.apache.org/schema/spring">
        <camel:route id="_route1">
            <camel:from id="_fromrest_1" uri="cxfrs://bean://restService"/>
            <camel:process id="_processrest_1" ref="processor"/>
            <camel:to id="_to1" uri="amq:queue:queue1x"/>
            <camel:log id="_log1" message="hit ws route 1"/>
        </camel:route>
        <camel:route id="_route2">
            <camel:from id="_from2" uri="amq:queue:queue1x?concurrentConsumers=2"/>
            <camel:log id="_log2" message="hit amq route 2"/>
            <camel:log id="_log3" message="Message returned from the queue is ${body}"/>
            <camel:setBody id="_setBody2">
                <simple>${body}</simple>
            </camel:setBody>
            <setHeader headerName="CamelHttpMethod" id="_setHeader1">
                <constant>PUT</constant>
            </setHeader>
            <setHeader headerName="Cookie" id="_setHeader2">
                <constant>JSESSIONID=Z2rLMNdkmpz72nG2FTj5SuLHn_rbZxHzs7wbw3LG</constant>
            </setHeader>
            <setHeader headerName="Authorization" id="_setHeader3">
                <constant>eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJQQVNTV09SRC9hcHBhZG1pbiIsImF1dGgiOiJERUYtcm9sZS1hcHBhZG1pbiIsImV4cCI6MTUzNTQzNjg3Mn0.AqfYVoAFsh6XDiIGGVO8lRpGyb1HcdP2HN1rUWtfDbYNJ6rdsnLnT5nrqmtPSR7YfUui7pWKxEF96NcLKppQAg</constant>
            </setHeader>
            <camel:to id="_to2" uri="http:localhost:8080/api/outboundmsg/"/>
            <camel:log id="_log4" message="Message returned from iConnect is ${body} with header ${in.headers.CamelHttpResponseCode}"/>
        </camel:route>
    </camelContext>
</beans>

ActiveMQ配置应用程序Context-mq.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:camel="http://camel.apache.org/schema/spring"
    xmlns:cxf="http://camel.apache.org/schema/cxf"
    xmlns:osgi="http://www.springframework.org/schema/osgi"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf-2.8.3.xsd">
    <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="amq">
        <property name="connectionFactory" ref="singleCF"/>
        <property name="useSingleConnection" value="true"/>
        <property name="usePooledConnection" value="false"/>
        <property name="preserveMessageQos" value="true"/>
        <property name="acknowledgementModeName" value="AUTO_ACKNOWLEDGE"></property>
    </bean>
    <bean
        class="org.springframework.jms.connection.SingleConnectionFactory" id="singleCF">
        <property name="targetConnectionFactory" ref="AMQCF"/>
    </bean>
    <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="AMQCF">
        <property name="userName" value="admin"/>
        <property name="password" value="admin"/>
        <property name="brokerURL" value="tcp://localhost:61616"/>
    </bean>
    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        init-method="start" destroy-method="stop">
        <property name="maxConnections" value="8" />
        <property name="connectionFactory" ref="AMQCF" />
    </bean>
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="pooledConnectionFactory" />
    </bean>
</beans>

提前谢谢你。

共有1个答案

濮阳振
2023-03-14

一旦消费者消费了确认书,经纪人就会收到确认书。i、 e.在你的情况下

您的需求不清楚,但是如果需要在队列上实现请求-应答,可以将replyTo参数设置为queue,并将从tomcat收到的应答推送到该replyTo队列。或者,让我知道确切的要求。

 类似资料:
  • 我正在使用Apache Camel将数据从CSV文件加载到webservice。我是否可以显示请求和响应。以下是路线配置。。 我从数组中拆分并聚合100个项目,以作为邮件正文发送。 请让我知道如何使用上述路线显示请求和响应?

  • 问题内容: 我已经编写了一个函数,希望在提交表单之前显示确认消息。我应该如何添加我的条件。下面是我的代码。 问题答案: 解决方案是使用ajax属性。 beforeSend是发送之前的请求前回调函数.beforeSend函数中返回false将取消请求。 AJAX

  • 我有客户通过不同的方式发送请求,比如web请求、http请求、soap请求或其他渠道。 在 Camel 中,我从各自的endpoint接收它到 jms 队列。从队列处理器拾取消息。现在处理器需要根据客户端的偏好(它们在传入请求中发送)向客户端发送确认。偏好可以是他们希望通过Web服务或JMS或文件系统接收确认。 我认为它可以以某种方式完成 http://camel.apache.org/reque

  • 主要内容:HTTP请求完整格式HTTP请求完整格式 HTTP请求由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求示例: ①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。 ②为请求对应的URL地址,它和报文头的Hos

  • 获取请求 要通过依赖注入的方式来获取当前 HTTP 请求的实例,你应该在控制器方法中引入 Illuminate\Http\Request 类。传入的请求实例将通过 服务容器 自动注入: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controll

  • Blade 支持注解的方式或者使用 Request 对象获取请求信息。 表单参数 先看看 Request 提供的操作表单参数的API Optional<String> query(String name) Optional<Integer> queryInt(String name) Optional<Long> queryLong(String name) Optional<Double> qu