2012-04-23 157 views
1

我正在使用Spring Integration 2.我有以下場景。 'MassMessageObject'由一個正文字段和一個收件人列表組成。我正在實現一個分離器來爲列表中的每個收件人創建一個'BasicMessageObject'。問題是分離器的輸出通道只接收到第一條消息。例如:Spring Integration 2 - Splitter只返回第一個元素

MassMessageObject> [正文:你好,收件人{A,B}] 是創造BasicMessageObject 的列表{[正文:你好,收件人:A],[正文:你好,收件人:B]}。

連接到輸出通道的端點正在接收'[body:Hello,recipient:A]',但不是'[body:Hello,recipient: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 = [email protected], marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}] to integration Message payload [com.connexo.icub[email protected]28f2e328] 
[springframework.integration.channel.DirectChannel:224] - preSend on channel 'mass_receiving_channel', message: [Payload=com.connexo.icub[email protected]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] - [email protected]56de9984 received message: [Payload=com.connexo.icub[email protected]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 '[email protected]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.spr[email protected]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}] .... 
+0

我建議你記錄的org.springframework.integration設置爲調試運行。你應該能夠追蹤消息並找出發生的事情。如果沒有,在這裏發佈日誌。 使用此配置,第二條消息將不會發送,直到第一條消息完成。如果你想讓它們在不同的線程上運行,你需要一個異步切換。 – 2012-04-23 19:31:12

+0

感謝您的回覆Gary ...有趣的是,我剛剛完成了一個使用分離器和所有的小POC,並猜測是什麼。它運作良好。所以它一定是一些錯誤的conifg。我會採納你的建議並增加日誌到DEBUG。乾杯。 – Kros 2012-04-23 20:27:29

+0

附加查找日誌: – Kros 2012-04-24 06:35:02

回答

1

我有同樣的問題。添加一個任務執行到分離器的流出通道使彈簧提供從分離器來的所有消息:

<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> 
相關問題