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)); }
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); }
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); }