Spring integration 在spring集成中,并行地将消息传递到数据库和生产者端(jms)

Spring integration 在spring集成中,并行地将消息传递到数据库和生产者端(jms),spring-integration,activemq,Spring Integration,Activemq,我正在做一个关于spring与(jms)activemq集成的示例项目。要求是将数据存储到数据库,并将数据传递到activemq中的队列,两者都应该并行工作。向生产者端发送消息时出错,如“嵌套异常为java.lang.IllegalStateException:类型为[class userDetails.web.QkaapzzMessageProducer]的目标对象没有处理消息的合格方法。” <int:publish-subscribe-channel id="postChann

我正在做一个关于spring与(jms)activemq集成的示例项目。要求是将数据存储到数据库,并将数据传递到activemq中的队列,两者都应该并行工作。向生产者端发送消息时出错,如“嵌套异常为java.lang.IllegalStateException:类型为[class userDetails.web.QkaapzzMessageProducer]的目标对象没有处理消息的合格方法。”

    <int:publish-subscribe-channel id="postChannel" />      
    <jms:inbound-channel-adapter id="jmsIn"
        destination="helloWorldJMSQueue"
        channel="postChannel"
        extract-payload="false" 
        auto-startup="true">
        <int:poller fixed-delay="3000" />
     </jms:inbound-channel-adapter>                                     
 <jms:message-driven-channel-adapter id="helloWorldJMSAdapater" destination="helloWorldJMSQueue" connection-factory="jmsConnectionFactory"
    channel="postChannel" />


<integration:service-activator id="helloWorldServiceActivator" input-channel="postChannel" 
ref="qkaapzzMessageProducer" method="sendMessage" output-channel="nullChannel" />                                                                                                       


<int:channel id="requestChannel" />
<int:channel id="outputChannel" />

<int-http:inbound-gateway request-channel="requestChannel"
reply-channel="outputChannel" supported-methods="GET" path="/register"
view-name="register">
<int-http:request-mapping />
</int-http:inbound-gateway>
<int-http:inbound-gateway request-channel="postChannel"
reply-channel="outputChannel" supported-methods="POST" path="/registerNew"
error-channel="errorChannel" view-name="login">
</int-http:inbound-gateway>



<int-jdbc:outbound-channel-adapter 
    query="insert into user_registration (USER_FSTNAME,USER_ADDRESS,USER_STATE,USER_CITY,USER_OCCUPATION,USER_EMAIL,USER_CONTACT,USER_PASSWORD) 
values (:fstName,:addrss,:state,:city,:occupation,:email,:contact,:password)"
    channel="postChannel" data-source="dataSource" id="sample" sql-parameter-source-factory="spelSource"  />


<int:service-activator  ref="userService" input-channel="requestChannel"
                             output-channel="outputChannel"  method="message"/>

<bean id="spelSource"
    class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
    <property name="parameterExpressions">
        <map>                                                                                                                           
            <entry key="fstName" value="payload[firstName]" />
            <entry key="lstName" value="payload[lastName]" />
            <entry key="addrss" value="payload[address]" />
            <entry key="state" value="payload[state]" />                
            <entry key="city" value="payload[city]" />
            <entry key="occupation" value="payload[occupation]" />
            <entry key="email" value="payload[email]"/>
            <entry key="contact" value="payload[contact]"/>
            <entry key="password" value="payload[password]"/>
        </map>
    </property>
</bean>

我的制片人班

public class QkaapzzMessageProducer {
private Connection connection;
private Session session;
private javax.jms.MessageProducer messageProducer;
public static final String HELLO_WORLD_QUEUE = "testQueue";
public Message<?> sendMessage(Message<?> msg,String queue2) throws 
JMSException {

    if((queue2.equals("")) ||(queue2.equals(null)) )
    {   
        queue2=HELLO_WORLD_QUEUE;
        session =
            connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue(queue2);
        messageProducer = session.createProducer(queue);
       // TextMessage txt = session.createTextMessage(text);
        messageProducer.send((javax.jms.Message) msg);
        // TODO Auto-generated method stub
     }
    else      
    {
    session =connection.createSession(false, 
    Session.AUTO_ACKNOWLEDGE);
    Queue queue = session.createQueue(queue2);
    messageProducer = session.createProducer(queue);
    messageProducer.send((javax.jms.Message) msg);
        }
    return msg;
}
}
公共类QkaapzzMessageProducer{
专用连接;
非公开会议;
私有javax.jms.MessageProducer MessageProducer;
公共静态最终字符串HELLO\u WORLD\u QUEUE=“testQueue”;
公共消息sendMessage(消息消息,字符串queue2)引发
性感觉{
if((queue2.equals(“”)| |(queue2.equals(null)))
{   
queue2=你好(HELLO_WORLD_)队列;;
会议=
connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue Queue=session.createQueue(queue2);
messageProducer=session.createProducer(队列);
//TextMessage txt=session.createTextMessage(文本);
messageProducer.send((javax.jms.Message)msg);
//TODO自动生成的方法存根
}
其他的
{
session=connection.createSession(false,
会话(自动确认);
Queue Queue=session.createQueue(queue2);
messageProducer=session.createProducer(队列);
messageProducer.send((javax.jms.Message)msg);
}
返回味精;
}
}

我还需要将该消息从队列传递给消费者。我对这一切都不熟悉,请帮我找到一个解决方案

你的问题不清楚,因为你提出的问题与问题的主题无关

您的异常是
sendMessage()
方法签名不适合消息传递模型

那里的情况是:

public Message<?> sendMessage(Message<?> msg, String queue2) throws 
public Message sendMessage(Message msg,String queue2)抛出
Spring集成基于
消息
对象交换。因此,当Service Activator尝试调用该方法时,它手中只有一条请求
消息
,完全不知道该
queue2
参数是什么以及如何处理它

您可以在
queue2
参数上添加
@Header
注释来帮助它。当然,如果消息头中确实包含了这些信息,那么它就会起作用

请参阅中的更多信息