示例#1
0
        public async Task <Result <BindingInfo> > Create(Action <BindingCreateAction> action, CancellationToken cancellationToken = default)
        {
            cancellationToken.RequestCanceled();

            var impl = new BindingCreateActionImpl();

            action(impl);

            impl.Validate();

            BindingDefinition definition = impl.Definition.Value;

            Debug.Assert(definition != null);

            string      sourceBinding      = impl.SourceBinding.Value;
            string      destinationBinding = impl.DestinationBinding.Value;
            BindingType bindingType        = impl.BindingType.Value;
            string      vhost = impl.VirtualHost.Value.ToSanitizedName();

            string url = bindingType == BindingType.Exchange
                ? $"api/bindings/{vhost}/e/{sourceBinding}/e/{destinationBinding}"
                : $"api/bindings/{vhost}/e/{sourceBinding}/q/{destinationBinding}";

            if (impl.Errors.Value.Any())
            {
                return(new FaultedResult <BindingInfo>(impl.Errors.Value, new DebugInfoImpl(url, definition.ToJsonString())));
            }

            return(await Post <BindingInfo, BindingDefinition>(url, definition, cancellationToken));
        }
示例#2
0
        public async Task <Result <BindingInfo> > Create(Action <BindingCreateAction> action, CancellationToken cancellationToken = default)
        {
            cancellationToken.RequestCanceled();

            var impl = new BindingCreateActionImpl();

            action(impl);

            DefineBinding definition = impl.Definition.Value;

            Debug.Assert(definition != null);

            string      source      = impl.Source.Value;
            string      destination = impl.Destination.Value;
            BindingType bindingType = impl.BindingType.Value;
            string      vhost       = impl.VirtualHost.Value;

            var errors = new List <Error>();

            if (string.IsNullOrWhiteSpace(source))
            {
                errors.Add(new ErrorImpl("The name of the binding (queue/exchange) source is missing."));
            }

            if (string.IsNullOrWhiteSpace(destination))
            {
                errors.Add(new ErrorImpl("The name of the destination binding (queue/exchange) is missing."));
            }

            if (string.IsNullOrWhiteSpace(vhost))
            {
                errors.Add(new ErrorImpl("The name of the virtual host is missing."));
            }

            if (!impl.Errors.Value.IsNull())
            {
                errors.AddRange(impl.Errors.Value);
            }

            if (errors.Any())
            {
                return(new FaultedResult <BindingInfo>(errors));
            }

            string url = bindingType == BindingType.Exchange
                ? $"api/bindings/{SanitizeVirtualHostName(vhost)}/e/{source}/e/{destination}"
                : $"api/bindings/{SanitizeVirtualHostName(vhost)}/e/{source}/q/{destination}";

            Result <BindingInfo> result = await Post <DefineBinding, BindingInfo>(url, definition, cancellationToken);

            return(result);
        }
示例#3
0
        public async Task <Result> CreateAsync(Action <BindingCreateAction> action, CancellationToken cancellationToken = new CancellationToken())
        {
            cancellationToken.RequestCanceled(LogInfo);

            var impl = new BindingCreateActionImpl();

            action(impl);

            DefineBinding definition = impl.Definition.Value;

            string      source      = impl.Source.Value;
            string      destination = impl.Destination.Value;
            BindingType bindingType = impl.BindingType.Value;
            string      vhost       = impl.VirtualHost.Value;

            if (string.IsNullOrWhiteSpace(source))
            {
                throw new BindingException("The name of the binding source is missing.");
            }

            if (string.IsNullOrWhiteSpace(destination))
            {
                throw new BindingException("The name of the binding destination is missing.");
            }

            if (string.IsNullOrWhiteSpace(vhost))
            {
                throw new VirtualHostMissingException("The name of the virtual host is missing.");
            }

            string sanitizedVHost = vhost.SanitizeVirtualHostName();

            string url = bindingType == BindingType.Exchange
                ? $"api/bindings/{sanitizedVHost}/e/{source}/e/{destination}"
                : $"api/bindings/{sanitizedVHost}/e/{source}/q/{destination}";

            HttpResponseMessage response = await HttpPost(url, definition, cancellationToken);

            Result result = response.GetResponse();

            LogInfo($"Sent request to RabbitMQ server to create a binding between exchanges '{source}' and '{destination}' on virtual host '{sanitizedVHost}'.");

            return(result);
        }