private void StartBackgroundReplier(QueueChannel channel)
 {
     new ThreadPerTaskExecutor().Execute(() =>
     {
         Spring.Integration.Core.IMessage request =
             channel.Receive(TimeSpan.FromMilliseconds(5000));
         Spring.Integration.Core.IMessage reply =
             new StringMessage(((string)request.Payload).ToUpper());
         ((IMessageChannel)request.Headers.ReplyChannel).Send(reply,
                                                              TimeSpan.
                                                              FromMilliseconds
                                                                  (5000));
     });
 }
Esempio n. 2
0
        public void OnMessage(IMessage nmsMessage, ISession session)
        {
            object obj = messageConverter.FromMessage(nmsMessage);

            Spring.Integration.Core.IMessage requestMessage = obj as Spring.Integration.Core.IMessage;
            if (requestMessage == null)
            {
                requestMessage = MessageBuilder.WithPayload(obj).Build();
            }
            if (!expectReply)
            {
                bool sent = channelTemplate.Send(requestMessage);
                if (!sent)
                {
                    throw new MessageDeliveryException(requestMessage, "failed to send Message to request channel");
                }
            }
            else
            {
                Spring.Integration.Core.IMessage replyMessage = channelTemplate.SendAndReceive(requestMessage);
                if (replyMessage != null)
                {
                    IDestination        destination = GetReplyDestination(nmsMessage, session);
                    Apache.NMS.IMessage nmsReply    = messageConverter.ToMessage(replyMessage, session);
                    if (nmsReply.NMSCorrelationID != null)
                    {
                        nmsReply.NMSCorrelationID = nmsMessage.NMSMessageId;
                    }
                    Apache.NMS.IMessageProducer producer = session.CreateProducer(destination);
                    try
                    {
                        producer.Send(nmsReply);
                    } finally
                    {
                        producer.Close();
                    }
                }
            }
        }