Java SpringIntegration2-Splitter只返回第一个元素

Java SpringIntegration2-Splitter只返回第一个元素,java,spring,spring-integration,Java,Spring,Spring Integration,我使用的是SpringIntegration2。我有下面的场景。“MassMessageObject”由正文字段和收件人列表组成。我正在实现一个拆分器,为列表中的每个收件人创建一个“BasicMessageObject”。问题是拆分器的输出通道只接收第一条消息。例如: MassMessageObject>[正文:你好,收件人{A,B}] 正在创建BasicMessageObject的列表 {[正文:你好,收件人:A],[正文:你好,收件人:B]} 连接到输出通道的终结点正在接收“[body:He

我使用的是SpringIntegration2。我有下面的场景。“MassMessageObject”由正文字段和收件人列表组成。我正在实现一个拆分器,为列表中的每个收件人创建一个“BasicMessageObject”。问题是拆分器的输出通道只接收第一条消息。例如:

MassMessageObject>[正文:你好,收件人{A,B}] 正在创建BasicMessageObject的列表 {[正文:你好,收件人:A],[正文:你好,收件人:B]}

连接到输出通道的终结点正在接收“[body:Hello,收件人:A]”,而不是“[body:Hello,收件人:B]”

以下是我的应用程序上下文:

<int:splitter input-channel="mass_receiving_channel"
                  output-channel="receiving_channel"                  
                  method="splitMessages"
                  ref="massMessageSplitter"/>

<!-- Main Chain. The one that will lead to the messageTypeRouter -->
<int:chain input-channel="receiving_channel" output-channel="sms_channel">
        <int:service-activator ref="saveMessageToDB" method="saveMessageToDB"/>
        <int:gateway request-channel="message_type_router_channel"/>
</int:chain>

以下是拆分器

public List<BasicMessageObject> splitMessages(final GenericMessage message) {
        List<BasicMessageObject> messages = new ArrayList<BasicMessageObject>();
        // DOING STUFF HERE 
        return messages;
    }
}





[springframework.integration.jms.ChannelPublishingJmsMessageListener:234] - converted JMS Message [ActiveMQObjectMessage {commandId = 6, responseRequired = true, messageId = ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1, originalDestination = null, originalTransactionId = null, producerId = ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2, destination = queue://mass_messaging_queue, transactionId = null, expiration = 0, timestamp = 1335249128840, arrival = 0, brokerInTime = 1335249128841, brokerOutTime = 1335249128842, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@39673d71, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}] to integration Message payload [com.connexo.icubeplus3.dispatcher.connector.messageobjects.SmsMassMessageObject@28f2e328]
[springframework.integration.channel.DirectChannel:224] - preSend on channel 'mass_receiving_channel', message: [Payload=com.connexo.icubeplus3.dispatcher.connector.messageobjects.SmsMassMessageObject@28f2e328][Headers={timestamp=1335249128882, id=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}]
[springframework.integration.splitter.MethodInvokingSplitter:72] - org.springframework.integration.splitter.MethodInvokingSplitter@56de9984 received message: [Payload=com.connexo.icubeplus3.dispatcher.connector.messageobjects.SmsMassMessageObject@28f2e328][Headers={timestamp=1335249128882, id=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}]
[springframework.integration.splitter.MethodInvokingSplitter:157] - handler 'org.springframework.integration.splitter.MethodInvokingSplitter@56de9984' sending reply Message: [Payload=[SMS] [sender: icube+] [destination: +35611111111] [messageIdentifier: 1234] [clientId: 1]][Headers={timestamp=1335249137537, id=566d7d54-f4cc-4896-8d39-d95636c20a57, correlationId=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, sequenceSize=4, sequenceNumber=1, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}]
[springframework.integration.channel.DirectChannel:224] - preSend on channel 'receiving_channel', message: [Payload=[SMS] [sender: icube+] [destination: +35611111111] [messageIdentifier: 1234] clientId: 1]][Headers={timestamp=1335249137537, id=566d7d54-f4cc-4896-8d39-d95636c20a57, correlationId=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, sequenceSize=4, sequenceNumber=1, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}]
[springframework.integration.handler.MessageHandlerChain:72] - org.springframework.integration.handler.MessageHandlerChain#0 received message: [Payload=[SMS] [sender: icube+] [destination: +35611111111] [messageIdentifier: 1234] [clientId: 1]][Headers={timestamp=1335249137537, id=566d7d54-f4cc-4896-8d39-d95636c20a57, correlationId=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, sequenceSize=4, sequenceNumber=1, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}]
[springframework.integration.handler.ServiceActivatingHandler:72] - ServiceActivator for [org.springframework.integration.handler.MethodInvokingMessageProcessor@27b71c12] received message: [Payload=[SMS] [sender: icube+] [destination: +35611111111] [messageIdentifier: 1234] [clientId: 1]][Headers={timestamp=1335249137537, id=566d7d54-f4cc-4896-8d39-d95636c20a57, correlationId=fb9904da-f5b1-49e0-af25-6711015f1365, jms_redelivered=false, sequenceSize=4, sequenceNumber=1, jms_messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1}] .... 
公共列表拆分消息(最终通用消息){
列表消息=新建ArrayList();
//在这里做事
返回消息;
}
}
[springframework.integration.jms.ChannelPublishingJmsMessageListener:234]-转换的jms消息[ActiveMQObjectMessage]{commandId=6,responseRequired=true,messageId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2:1,originaldestation=null,originalTransactionId=null,producerId=ID:PC-CMICALLEF-61953-1335249128607-0:0:1:2,destination=queue://mass_messaging_queue,transactionId=null,过期时间=0,时间戳=1335249128840,到达时间=0,brokerInTime=1335249128841,BrokerRoutTime=1335249128842,correlationId=null,replyTo=null,persistent=true,type=null,priority=4,groupID=null,groupSequence=0,targetConsumerId=null,compressed=false,userID=null,content=org.apache.activemq.util。ByteSequence@39673d71,marshalledProperties=null,dataStructure=null,redeliveryC向集成消息有效负载[com.connexo.icubeplus3.dispatcher.connector.messageobjects]装入计数器=0,大小=0,属性=null,只读属性=true,只读正文=true,可拖放=false}]。SmsMassMessageObject@28f2e328]
[springframework.integration.channel.DirectChannel:224]-在通道“mass\u receiving\u channel”上显示,消息:[Payload=com.connexo.icubeplus3.dispatcher.connector.messageobjects。SmsMassMessageObject@28f2e328][标题={timestamp=1335249128882,id=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelivered=false,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2:1}]
[springframework.integration.splitter.MethodInvokingSplitter:72]-org.springframework.integration.splitter。MethodInvokingSplitter@56de9984收到的消息:[有效负载=com.connexo.icubeplus3.dispatcher.connector.messageobjects。SmsMassMessageObject@28f2e328][标题={timestamp=1335249128882,id=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelivered=false,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2:1}]
[springframework.integration.splitter.MethodInvokingSplitter:157]-handler'org.springframework.integration.splitter。MethodInvokingSplitter@56de9984'正在发送回复消息:[Payload=[SMS][sender:icube+][destination:+3561111111][messageIdentifier:1234][clientId:1]][Headers={timestamp=133524913737,id=566d7d54-f4cc-4896-8d39-d95636c20a57,correlationId=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelived=false,sequenceSize=4,sequenceNumber=1,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2}]
[springframework.integration.channel.DirectChannel:224]-在通道“receiving_channel”上显示消息:[有效负载=[SMS][发送方:icube+][目的地:+3561111111][消息标识符:1234]客户端ID:1][头={timestamp=133524913737,id=566d7d54-f4cc-4896-8d39-d95636c20a57,correlationId=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelived=false,sequenceSize=4,sequenceNumber=1,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2}]
[springframework.integration.handler.MessageHandlerChain:72]-org.springframework.integration.handler.MessageHandlerChain#0收到的消息:[有效负载=[SMS][发送方:icube+][目的地:+3561111111][消息标识符:1234][客户端ID:1][标题]={timestamp=133524913737,id=566d7d54-f4cc-4896-8d39-d95636c20a57,correlationId=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelived=false,sequenceSize=4,sequenceNumber=1,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2}]
[springframework.integration.handler.ServiceActivationHandler:72]-用于[org.springframework.integration.handler]的ServiceActivator。MethodInvokingMessageProcessor@27b71c12]收到的消息:[有效负载=[SMS][发送方:icube+][目的地:+3561111111][消息标识符:1234][客户端ID:1]][头={timestamp=1335249137537,id=566d7d54-f4cc-4896-8d39-d95636c20a57,correlationId=fb9904da-f5b1-49e0-af25-6711015f1365,jms_redelived=false,sequenceSize=4,sequenceNumber=1,jms_messageId=id:PC-CMICALLEF-61953-1335249128607-0:1:2:1}]。。。。

我也有同样的问题。将任务执行器添加到拆分器的传出通道使Spring能够传递来自拆分器的所有消息:

<splitter input-channel="incoming-splitter" output-channel="outgoing-splitter"/>

<channel id="outgoing-splitter">
  <dispatcher task-executor="taskExecutor"/>
</channel>

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <!-- Use 1 for sequential processing -->
  <property name="corePoolSize" value="1"/>
  <property name="maxPoolSize" value="1"/>
  <property name="threadNamePrefix" value="Splitter Message Handler "/>
  <property name="waitForTasksToCompleteOnShutdown" value="true"/>
</bean>

我也有同样的问题。将任务执行器添加到拆分器的传出通道使Spring能够传递来自拆分器的所有消息:

<splitter input-channel="incoming-splitter" output-channel="outgoing-splitter"/>

<channel id="outgoing-splitter">
  <dispatcher task-executor="taskExecutor"/>
</channel>

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <!-- Use 1 for sequential processing -->
  <property name="corePoolSize" value="1"/>
  <property name="maxPoolSize" value="1"/>
  <property name="threadNamePrefix" value="Splitter Message Handler "/>
  <property name="waitForTasksToCompleteOnShutdown" value="true"/>
</bean>


我建议您将org.springframework.integration的logger设置为DEBUG运行。您应该能够跟踪消息并找出发生了什么。如果没有,请在此处发布日志。使用此配置,在第一条消息完成之前,不会发送第二条消息。如果您希望它们在单独的线程上运行,则需要n异步切换。感谢您的回复Gary…有趣的是,我刚刚使用拆分器完成了一个小型POC,猜猜看是什么。它工作得很好。所以它一定是一些错误的conifg。我会采纳您的建议,增加日志记录以进行调试。干杯。我发现将输出通道连接到激活服务而不是一个链就可以做到这一点。另外,我在spring集成代码中进行了调试,发现了ou