internal GatewayAcceptor(MessageCenter msgCtr, Gateway gateway, IPEndPoint gatewayAddress) : base(msgCtr, gatewayAddress, SocketDirection.GatewayToClient) { this.gateway = gateway; loadSheddingCounter = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_LOAD_SHEDDING); gatewayTrafficCounter = CounterStatistic.FindOrCreate(StatisticNames.GATEWAY_RECEIVED); }
internal SiloMessageSender(string nameSuffix, MessageCenter msgCtr) : base(nameSuffix, msgCtr.MessagingConfiguration) { messageCenter = msgCtr; lastConnectionFailure = new Dictionary<SiloAddress, DateTime>(); OnFault = FaultBehavior.RestartOnFault; }
// Used for holding enough info to handle receive completion internal IncomingMessageAcceptor(MessageCenter msgCtr, IPEndPoint here, SocketDirection socketDirection) { MessageCenter = msgCtr; listenAddress = here; if (here == null) listenAddress = MessageCenter.MyAddress.Endpoint; AcceptingSocket = SocketManager.GetAcceptingSocketForEndpoint(listenAddress); Log.Info(ErrorCode.Messaging_IMA_OpenedListeningSocket, "Opened a listening socket at address " + AcceptingSocket.LocalEndPoint); OpenReceiveSockets = new HashSet<Socket>(); OnFault = FaultBehavior.CrashOnFault; SocketDirection = socketDirection; }
internal OutboundMessageQueue(MessageCenter mc, IMessagingConfiguration config) { messageCenter = mc; pingSender = new SiloMessageSender("PingSender", messageCenter); systemSender = new SiloMessageSender("SystemSender", messageCenter); senders = new Lazy<SiloMessageSender>[config.SiloSenderQueues]; for (int i = 0; i < senders.Length; i++) { int capture = i; senders[capture] = new Lazy<SiloMessageSender>(() => { var sender = new SiloMessageSender("AppMsgsSender_" + capture, messageCenter); sender.Start(); return sender; }, LazyThreadSafetyMode.ExecutionAndPublication); } logger = TraceLogger.GetLogger("Messaging.OutboundMessageQueue"); stopped = false; }
/// <summary> /// Handles an incoming (proxied) message by rerouting it immediately and unconditionally, /// after some header massaging. /// </summary> /// <param name="msg"></param> /// <param name="receivedOnSocket"></param> protected override void HandleMessage(Message msg, Socket receivedOnSocket) { // Don't process messages that have already timed out if (msg.IsExpired) { msg.DropExpiredMessage(MessagingStatisticsGroup.Phase.Receive); return; } if (Message.WriteMessagingTraces) { msg.AddTimestamp(Message.LifecycleTag.ReceiveIncoming); } gatewayTrafficCounter.Increment(); // Are we overloaded? if ((MessageCenter.Metrics != null) && MessageCenter.Metrics.IsOverloaded) { MessagingStatisticsGroup.OnRejectedMessage(msg); Message rejection = msg.CreateRejectionResponse(Message.RejectionTypes.GatewayTooBusy, "Shedding load"); MessageCenter.TryDeliverToProxy(rejection); if (Log.IsVerbose) { Log.Verbose("Rejecting a request due to overloading: {0}", msg.ToString()); } loadSheddingCounter.Increment(); return; } gateway.RecordSendingProxiedGrain(msg.SendingGrain, receivedOnSocket); SiloAddress targetAddress = gateway.TryToReroute(msg); msg.SendingSilo = MessageCenter.MyAddress; if (targetAddress == null) { // reroute via Dispatcher msg.RemoveHeader(Message.Header.TARGET_SILO); msg.RemoveHeader(Message.Header.TARGET_ACTIVATION); if (msg.TargetGrain.IsSystemTarget) { msg.TargetSilo = MessageCenter.MyAddress; msg.TargetActivation = ActivationId.GetSystemActivation(msg.TargetGrain, MessageCenter.MyAddress); } if (Message.WriteMessagingTraces) { msg.AddTimestamp(Message.LifecycleTag.RerouteIncoming); } MessagingStatisticsGroup.OnMessageReRoute(msg); MessageCenter.RerouteMessage(msg); } else { // send directly msg.TargetSilo = targetAddress; MessageCenter.SendMessage(msg); } }