/// <summary> /// Initializes a new instance of the <see cref="SubscriptionClient"/> class. /// </summary> /// <param name="bus">The bus.</param> /// <param name="router">The router.</param> /// <param name="subscriptionServiceUri">The subscription service URI.</param> /// <param name="startTimeout">The start timeout.</param> public SubscriptionClient(IServiceBus bus, ISubscriptionRouter router, Uri subscriptionServiceUri, TimeSpan startTimeout) { _bus = bus; _router = router; _subscriptionServiceUri = subscriptionServiceUri; _startTimeout = startTimeout; _network = router.Network; if (_log.IsDebugEnabled) { _log.DebugFormat("Starting SubscriptionClient using {0}", subscriptionServiceUri); } VerifyClientAndServiceNotOnSameEndpoint(bus); _ready.Reset(); var consumerInstance = new SubscriptionMessageConsumer(_router, _network); _unsubscribeAction = _bus.ControlBus.SubscribeInstance(consumerInstance); _unsubscribeAction += _bus.ControlBus.SubscribeContextHandler <SubscriptionRefresh>(Consume); _subscriptionEndpoint = _bus.GetEndpoint(subscriptionServiceUri); _producer = new SubscriptionServiceMessageProducer(router, _subscriptionEndpoint); WaitForSubscriptionServiceResponse(); }
/// <summary> /// Initializes a new instance of the <see cref="SubscriptionMessageConsumer"/> class. /// </summary> /// <param name="router">The router.</param> /// <param name="network">The network.</param> /// <param name="ignoredSourceAddresses">The ignored source addresses.</param> public SubscriptionMessageConsumer(ISubscriptionRouter router, string network, params Uri[] ignoredSourceAddresses) { _router = router; _peerId = router.PeerId; _peerUri = router.PeerUri; _network = network; _ignoredSourceAddresses = new HashSet <Uri>(ignoredSourceAddresses); }
public void SetTargetCoordinator(ISubscriptionRouter targetRouter) { lock (this) { _targetRouter = targetRouter; _waiting.ForEach(x => x(_targetRouter)); _waiting.Clear(); } }
/// <summary> /// Initializes a new instance of the <see cref="SubscriptionServiceMessageProducer"/> class. /// </summary> /// <param name="router">The router.</param> /// <param name="endpoint">The endpoint.</param> public SubscriptionServiceMessageProducer(ISubscriptionRouter router, IEndpoint endpoint) { _peerId = router.PeerId; _peerUri = router.PeerUri; _network = router.Network; _endpoint = endpoint; SendAddPeerMessage(); }
public BusSubscriptionMessageProducer(ISubscriptionRouter router, IEndpoint endpoint, Uri endpointUri) { _peerId = router.PeerId; _peerUri = router.PeerUri; _network = router.Network; _endpoint = endpoint; _endpointUri = endpointUri; _timestamp = DateTime.UtcNow.Ticks; SendAddPeerMessage(); }
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); } }
public SubscriptionLoopback(IServiceBus bus, ISubscriptionRouter router) { _router = router; _peerId = NewIds.NewId.NextGuid(); _waiting = new List <Action <ISubscriptionRouter> >(); _ignoredMessageTypes = IgnoredMessageTypes(); WithTarget(x => { if (_log.IsDebugEnabled) { _log.DebugFormat("Send AddPeer: {0}, {1}", _peerId, bus.ControlBus.Endpoint.Address.Uri); } x.Send(new AddPeerMessage { PeerId = _peerId, PeerUri = bus.ControlBus.Endpoint.Address.Uri, Timestamp = DateTime.UtcNow.Ticks, }); }); }
public ISubscriptionObserver Create(IServiceBus bus, ISubscriptionRouter router) { var client = new SubscriptionClient(bus, router, _subscriptionServiceUri, _timeout); return(client); }
public void Load(ISubscriptionRouter router) { _fiber.Add(() => LoadSubscriptions(router)); }