Ejemplo n.º 1
0
    TransportOperation RouteThroughLocalEndpointInstance(RoutingStrategy routingStrategy, IRoutingContext context)
    {
        var outgoingMessage = context.Message;
        var headers         = new Dictionary <string, string>(outgoingMessage.Headers);
        var originalTag     = routingStrategy.Apply(headers);
        var unicastTag      = originalTag as UnicastAddressTag;

        if (unicastTag == null)
        {
            var multicastTag = originalTag as MulticastAddressTag;
            if (multicastTag == null)
            {
                throw new Exception($"Unsupported type of address tag: {originalTag.GetType().FullName}");
            }
            headers["$.store-and-forward.eventtype"] = multicastTag.MessageType.AssemblyQualifiedName;
        }
        else
        {
            headers["$.store-and-forward.destination"] = unicastTag.Destination;
        }
        var message = new OutgoingMessage(outgoingMessage.MessageId, headers, outgoingMessage.Body);

        return(new TransportOperation(
                   message: message,
                   addressTag: new UnicastAddressTag(localAddress),
                   requiredDispatchConsistency: DispatchConsistency.Default,
                   deliveryConstraints: context.Extensions.GetDeliveryConstraints()));
    }
    TransportOperation RouteThroughLocalEndpointInstance(RoutingStrategy routingStrategy, IRoutingContext context)
    {
        Dictionary <string, string> headers = new Dictionary <string, string>(context.Message.Headers);
        AddressTag        originalTag       = routingStrategy.Apply(headers);
        UnicastAddressTag unicastTag        = originalTag as UnicastAddressTag;

        if (unicastTag == null)
        {
            MulticastAddressTag multicastTag = originalTag as MulticastAddressTag;
            if (multicastTag != null)
            {
                headers["$.store-and-forward.eventtype"] = multicastTag.MessageType.AssemblyQualifiedName;
            }
            else
            {
                throw new Exception("Unsupported type of address tag: " + originalTag.GetType().FullName);
            }
        }
        else
        {
            headers["$.store-and-forward.destination"] = unicastTag.Destination;
        }
        OutgoingMessage message = new OutgoingMessage(context.Message.MessageId, headers, context.Message.Body);

        return(new TransportOperation(message, new UnicastAddressTag(localAddress), DispatchConsistency.Default, context.Extensions.GetDeliveryConstraints()));
    }
Ejemplo n.º 3
0
        RoutingStrategy RerouteToTimeoutManager(RoutingStrategy routingStrategy, IRoutingContext context, DateTime deliverAt)
        {
            var headers     = new Dictionary <string, string>(context.Message.Headers);
            var originalTag = routingStrategy.Apply(headers);

            if (!(originalTag is UnicastAddressTag unicastTag))
            {
                throw new Exception("Delayed delivery using the Timeout Manager is only supported for messages with unicast routing");
            }
            return(new TimeoutManagerRoutingStrategy(timeoutManagerAddress, unicastTag.Destination, deliverAt));
        }