예제 #1
0
        public void Consume(IConsumeContext <AddPeer> context)
        {
            if (DiscardMessage(context, context.Message.PeerId))
            {
                return;
            }

            _router.Send(context.Message);
        }
예제 #2
0
        void LoadSubscriptions(ISubscriptionRouter router)
        {
            int messageNumber = 1;

            try
            {
                IEnumerable <PersistentSubscription> existing = _storage.Load(_busUri);

                var knownPeers = new HashSet <Guid>();

                foreach (PersistentSubscription subscription in existing)
                {
                    if (!knownPeers.Contains(subscription.PeerId))
                    {
                        _log.DebugFormat("Loading peer: {0} {1}", subscription.PeerId, subscription.PeerUri);

                        router.Send(new AddPeerMessage
                        {
                            PeerId    = subscription.PeerId,
                            PeerUri   = subscription.PeerUri,
                            Timestamp = subscription.Updated.Ticks,
                        });
                    }

                    _log.DebugFormat("Loading subscription: {0}", subscription);

                    router.Send(new AddPeerSubscriptionMessage
                    {
                        PeerId         = subscription.PeerId,
                        SubscriptionId = subscription.SubscriptionId,
                        EndpointUri    = subscription.EndpointUri,
                        MessageName    = subscription.MessageName,
                        CorrelationId  = subscription.CorrelationId,
                        MessageNumber  = messageNumber++,
                    });
                }
            }
            catch (Exception ex)
            {
                _log.Error("Failed to load existing subscriptions", ex);
            }
        }