void HandleAck(CallInfo callInfo) { byte[] outMessage; IDictionary <string, string> outHeaders; if (!persister.AckMessage(callInfo.ClientId, out outMessage, out outHeaders)) { Logger.InfoFormat("Message with id: {0} is already acked, dropping the request", callInfo.ClientId); return; } var msg = new TransportMessage { Body = outMessage, Headers = new Dictionary <string, string>(), MessageIntent = MessageIntentEnum.Send, Recoverable = true }; if (outHeaders.ContainsKey(GatewayHeaders.IsGatewayMessage)) { HeaderMapper.Map(outHeaders, msg); } MessageReceived(this, new MessageReceivedOnChannelArgs { Message = msg }); }
void HandleSubmit(CallInfo callInfo) { using (var stream = new MemoryStream()) { callInfo.Data.CopyTo(stream); stream.Position = 0; Hasher.Verify(stream, callInfo.Md5); var msg = HeaderMapper.Map(headerManager.Reassemble(callInfo.ClientId, callInfo.Headers)); msg.Body = new byte[stream.Length]; stream.Read(msg.Body, 0, msg.Body.Length); if (deduplicator.DeduplicateMessage(callInfo.ClientId, DateTime.UtcNow)) { MessageReceived(this, new MessageReceivedOnChannelArgs { Message = msg }); } else { Logger.InfoFormat("Message with id: {0} is already on the bus, dropping the request", callInfo.ClientId); } } }
public void Forward(TransportMessage message, Site targetSite) { var headers = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase); HeaderMapper.Map(message, headers); var channelSender = channelFactory.GetSender(targetSite.Channel.Type); using (var messagePayload = new MemoryStream(message.Body)) Transmit(channelSender, targetSite, CallType.Submit, headers, messagePayload); TransmittDataBusProperties(channelSender, targetSite, headers); Transmit(channelSender, targetSite, CallType.Ack, headers, new MemoryStream()); }
void SendToSite(TransportMessage transportMessage, Site targetSite) { var headers = new NameValueCollection(); HeaderMapper.Map(transportMessage, headers); var channelSender = channelFactory.CreateChannelSender(targetSite.ChannelType); channelSender.Send(targetSite.Address, headers, transportMessage.Body); notifier.RaiseMessageForwarded(typeof(MsmqMessageReceiver), channelSender.GetType(), transportMessage); //todo get audit settings from the audit settings of the host (possibly allowing to override in config) //if (!string.IsNullOrEmpty(audit)) // messageSender.Send(e.Message, audit); }
public void Forward(TransportMessage message, Site targetSite) { var headers = new Dictionary <string, string>(StringComparer.CurrentCultureIgnoreCase); HeaderMapper.Map(message, headers); var channelSender = channelFactory.GetSender(targetSite.Channel.Type); //databus properties have to be available at the receiver site //before the body of the message is forwarded on the bus TransmitDataBusProperties(channelSender, targetSite, headers); using (var messagePayload = new MemoryStream(message.Body)) { Transmit(channelSender, targetSite, CallType.SingleCallSubmit, headers, messagePayload); } }
public void Start() { var templateTransport = Configure.Instance.Builder.Build <TransactionalTransport>(); transport = new TransactionalTransport { //todo grab the receiver from the main bus and clone MessageReceiver = new MsmqMessageReceiver(), IsTransactional = true, NumberOfWorkerThreads = templateTransport.NumberOfWorkerThreads == 0 ? 1 : templateTransport.NumberOfWorkerThreads, MaxRetries = templateTransport.MaxRetries, FailureManager = templateTransport.FailureManager }; transport.TransportMessageReceived += (s, e) => { var transportMessage = e.Message; var address = GetRemoteAddress(RemoteAddress, transportMessage); //todo - why are we doing this? if (!String.IsNullOrEmpty(transportMessage.IdForCorrelation)) { transportMessage.IdForCorrelation = transportMessage.Id; } var headers = new NameValueCollection(); HeaderMapper.Map(transportMessage, headers); channelSender.Send(address, headers, transportMessage.Body); notifier.RaiseMessageForwarded(ChannelType.Msmq, channelSender.Type, transportMessage); //todo get audit settings from the audit settings of the host (possibly allowing to override in config) //if (!string.IsNullOrEmpty(audit)) // messageSender.Send(e.Message, audit); }; transport.Start(InputQueue); }
void HandleAck(CallInfo callInfo) { byte[] outMessage; IDictionary <string, string> outHeaders; if (!persister.AckMessage(callInfo.ClientId, out outMessage, out outHeaders)) { Logger.InfoFormat("Message with id: {0} is already acked, dropping the request", callInfo.ClientId); return; } var msg = HeaderMapper.Map(outHeaders); msg.Body = outMessage; MessageReceived(this, new MessageReceivedOnChannelArgs { Message = msg }); }