예제 #1
0
        public static void Route(this IBus bus, object message, Guid routingSlipId, params string[] destinations)
        {
            var builder = new RoutingSlipBuilder();

            var routingSlip = builder.CreateRoutingSlip(routingSlipId, destinations);

            var router = Configure.Instance.Builder.Build <IRouter>();

            router.SendToFirstStep(message, routingSlip);
        }
        public static void Route(this IBus bus, object message, Guid routingSlipId, params string[] destinations)
        {
            var builder = new RoutingSlipBuilder();
            
            var routingSlip = builder.CreateRoutingSlip(routingSlipId, destinations);

            var router = Configure.Instance.Builder.Build<IRouter>();

            router.SendToFirstStep(message, routingSlip);
        }
        public void Should_build_routing_slip()
        {
            var builder = new RoutingSlipBuilder();

            var routingSlipId = Guid.NewGuid();

            RoutingSlip routingSlip = builder.CreateRoutingSlip(routingSlipId, "foo");

            routingSlip.ShouldNotBeNull();
            routingSlip.Id.ShouldEqual(routingSlipId);
            routingSlip.Itinerary.Count().ShouldEqual(1);
            routingSlip.Itinerary.First().Address.ShouldEqual("foo");
        }
        public void Should_send_to_first_destination()
        {
            var routingSlip = new RoutingSlipBuilder().CreateRoutingSlip(Guid.NewGuid(), "foo");

            var bus = new Bus();
            var router = new Router(bus);

            var message = new DummyMessage();
            router.SendToFirstStep(message, routingSlip);

            bus.GetMessageHeader(message, Router.RoutingSlipHeaderKey).ShouldNotBeNull();
            bus.ExplicitlySent.Count().ShouldEqual(1);
            bus.ExplicitlySent.First().Item1.ShouldEqual("foo");
            bus.ExplicitlySent.First().Item2.ShouldEqual(message);
        }
        public void Should_be_able_to_serialize()
        {
            var builder = new RoutingSlipBuilder();
            var routingSlip = builder.CreateRoutingSlip(Guid.NewGuid(), "foo", "bar");
            routingSlip.Log.Add(new ProcessingStepResult { Address = "baz" });

            var result = JsonConvert.SerializeObject(routingSlip);

            var deserialized = JsonConvert.DeserializeObject<RoutingSlip>(result);

            deserialized.Id.ShouldEqual(routingSlip.Id);
            deserialized.Itinerary.Count.ShouldEqual(2);
            deserialized.Itinerary[0].Address.ShouldEqual("foo");
            deserialized.Itinerary[1].Address.ShouldEqual("bar");
            deserialized.Log.Count.ShouldEqual(1);
            deserialized.Log[0].Address.ShouldEqual("baz");
        }
        public void Should_send_to_next_destination_if_no_error()
        {
            var routingSlip = new RoutingSlipBuilder().CreateRoutingSlip(Guid.NewGuid(), "foo", "bar");

            var bus = new Bus();
            var router = new Router(bus);

            router.SendToNextStep(null, routingSlip);

            bus.CurrentMessageContext.Headers[Router.RoutingSlipHeaderKey].ShouldNotBeNull();

            routingSlip.Itinerary.Count.ShouldEqual(1);
            routingSlip.Log.Count.ShouldEqual(1);
            routingSlip.Log[0].Address.ShouldEqual("foo");

            bus.Forwarded.Count().ShouldEqual(1);
            bus.Forwarded.ShouldContain("bar");
        }
        public void Should_complete_route()
        {
            var routingSlip = new RoutingSlipBuilder().CreateRoutingSlip(Guid.NewGuid(), "foo", "bar");

            var bus = new Bus();
            var router = new Router(bus);

            router.SendToNextStep(null, routingSlip);
            
            bus.CurrentMessageContext.Headers.Clear();
            
            router.SendToNextStep(null, routingSlip);

            bus.CurrentMessageContext.Headers.ContainsKey(Router.RoutingSlipHeaderKey).ShouldBeFalse();

            routingSlip.Itinerary.Count.ShouldEqual(0);
            routingSlip.Log.Count.ShouldEqual(2);
            routingSlip.Log[0].Address.ShouldEqual("foo");

            bus.Forwarded.Count().ShouldEqual(1);

        }
        public void Should_not_send_to_next_destination_if_error()
        {
            var routingSlip = new RoutingSlipBuilder().CreateRoutingSlip(Guid.NewGuid(), "foo", "bar");

            var bus = new Bus();
            var router = new Router(bus);

            router.SendToNextStep(new Exception(), routingSlip);

            bus.CurrentMessageContext.Headers.ContainsKey(Router.RoutingSlipHeaderKey).ShouldBeFalse();

            routingSlip.Itinerary.Count.ShouldEqual(2);
            routingSlip.Log.Count.ShouldEqual(0);

            bus.Forwarded.Count().ShouldEqual(0);
        }