Example #1
0
 public Subscription(Type messageType, BusEndpoint subscriberEndpoint, BusEndpoint publisherEndpoint, bool unsubscribeOnStop)
 {
     Token              = Guid.NewGuid();
     MessageType        = messageType;
     SubscriberEndpoint = subscriberEndpoint;
     PublisherEndpoint  = publisherEndpoint;
     UnsubscribeOnStop  = unsubscribeOnStop;
 }
Example #2
0
        public void SubscribeTo <TMessage>(BusEndpoint publisherEndpoint, Action <TMessage> handler, bool unsubscribeOnStop = true)
            where TMessage : class
        {
            MessageHandlers.Add(handler);
            var subscription = new Subscription(typeof(TMessage), LocalEndpoint, publisherEndpoint, unsubscribeOnStop);

            _subscriptions.Add(subscription);
            Send(new StartSubscriptionRequest(subscription), publisherEndpoint);
        }
Example #3
0
        private void SendToErrorQueue(Message obj)
        {
            var errorsEndpoint = new BusEndpoint(LocalEndpoint.MachineName, LocalEndpoint.QueueName + "_errors");
            var errorQueuePath = MsmqEndpointParser.GetQueuePath(errorsEndpoint);
            var errorQueue     = GetOrCreateMessageQueue(errorQueuePath);

            errorQueue.Send(obj);
            errorQueue.Dispose();
        }
Example #4
0
 public ServiceBus(string localQueueName)
 {
     LocalEndpoint   = new BusEndpoint("", localQueueName);
     MessageHandlers = new MessageHandlers();
     TargetEndpoints = new TargetEndpoints();
     MessageHandlers.Add <StartSubscriptionRequest>(Handle);
     MessageHandlers.Add <EndSubscriptionRequest>(Handle);
     // TODO: Should it be possible to reject a subscription request?
     //MessageHandlers.Add<SubscriptionStarted>(Handle);
     //MessageHandlers.Add<SubscriptionEnded>(Handle);
     _replyGenerators.AddFor <StartSubscriptionRequest>(r => new SubscriptionStarted(r.Subscription));
     _replyGenerators.AddFor <EndSubscriptionRequest>(r => new SubscriptionEnded(r.Subscription));
 }
Example #5
0
        public void Unsubscribe <TMessage>(BusEndpoint publisherEndpoint)
            where TMessage : class
        {
            var messageType = typeof(TMessage);
            var subs        = _subscriptions.For(messageType);

            foreach (var subscription in subs)
            {
                Send(new EndSubscriptionRequest(subscription), publisherEndpoint);
            }

            // TODO: Need to also remove the messagehandlers, store them separately from the regular ones?
            _subscriptions.Remove(messageType, publisherEndpoint);
        }
Example #6
0
        private void Send(object message, BusEndpoint targetEndpoint)
        {
            var queuePath = MsmqEndpointParser.GetQueuePath(targetEndpoint);

            if (!MessageQueue.Exists(queuePath))
            {
                throw new TargetEndpointNotFoundException(string.Format("Unable to reach target endpoint {0}@{1}", targetEndpoint.QueueName, targetEndpoint.MachineName));
            }
            var remoteQueue = new MessageQueue(queuePath, QueueAccessMode.Send);

            if (!remoteQueue.CanWrite)
            {
                throw new UnableToSendMessageException(string.Format("Unable to send message to {0}@{1}", targetEndpoint.QueueName, targetEndpoint.MachineName));
            }
            remoteQueue.SendMessage(WrapInMsmqMessage(message));
        }
Example #7
0
 private Subscriber(Guid token, Type messageType, BusEndpoint endpoint)
 {
     Token       = token;
     MessageType = messageType;
     Endpoint    = endpoint;
 }
Example #8
0
 internal static string GetQueuePath(BusEndpoint endpoint)
 {
     return(String.Format(@"{0}\private$\{1}", endpoint.MachineName, endpoint.QueueName));
 }
Example #9
0
 internal void Remove(Type messageType, BusEndpoint publisherEndpoint)
 {
 }
Example #10
0
        public void SetFor <TMessage>(BusEndpoint endpoint)
        {
            var messageType = typeof(TMessage);

            _endpoints.AddOrUpdate(messageType, endpoint, (t, e) => endpoint);
        }