static void Main(string[] args) { var bus = Bus.Factory.CreateUsingRabbitMq(cfg => { var host = cfg.Host(new Uri("rabbitmq://192.168.17.129"), h => { h.Username("guest"); h.Password("guest"); }); }); bus.Start(); var message = new DemoRequest { Id = 1, Content = "MassTransit.RequestResponse.Demo", }; var address = new Uri("rabbitmq://192.168.17.129/rabbitmq.demo.masstransit.requestresponse"); var requestTimeout = TimeSpan.FromSeconds(30); var client = new MessageRequestClient <DemoRequest, DemoResponse>(bus, address, requestTimeout); var result = client.Request(message).GetAwaiter().GetResult(); Console.WriteLine($"Response message: Code={result.ResultCode}, RequestId={result.RequestId}"); bus.Stop(); Console.WriteLine(" Press [enter] to exit request console."); Console.ReadLine(); }
private static async Task DoRequest(IBus bus) { var client = new MessageRequestClient <MyRequest, MyResponse>( bus, new Uri("rabbitmq://rmqcluster/qa/rmq-reconnection-test-app"), TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(5)); var id = Guid.NewGuid(); Console.WriteLine($"Sending payload {id}"); try { var response = await client.Request(new MyRequestImpl() { Payload = id }).ConfigureAwait(false); Console.WriteLine($"Received response payload {response.Payload}"); } catch (Exception e) { Console.WriteLine($"Exception thrown. Type: {e.GetType().Name} Message: {e.Message}"); } }
/// <summary> /// Послать сообщение в очередь и получить сообщение в ответ /// </summary> /// <typeparam name="TRequest">тип запроса</typeparam> /// <typeparam name="TResponse">тип ответа</typeparam> /// <param name="request">запрос</param> /// <param name="requestTimeOutInSeconds">тайм-аут запроса в секундах</param> /// <param name="ignoreTimeoutException">Нужно ли игнорировать ошибку тайм аута. Если игнорируем, то возвращаем null</param> /// <returns>Task</returns> public async Task <TResponse> Request <TRequest, TResponse>(TRequest request, double requestTimeOutInSeconds, bool ignoreTimeoutException = false) where TRequest : class, IWithQueueName where TResponse : class { CheckForNull(request); var queueName = GetQueueNameOrThrow(request); InitBusAndThrowOnError(); if (requestTimeOutInSeconds <= 0) { throw new Exception($"Таймаут для запроса должен быть больше нуля. Текущее значение = {requestTimeOutInSeconds}"); } var address = ComposeUri(queueName); var requestTimeout = TimeSpan.FromSeconds(requestTimeOutInSeconds); var client = new MessageRequestClient <TRequest, TResponse>(_bus, address, requestTimeout); try { return(await client.Request(request, CancellationToken.None)); } catch (RequestTimeoutException e) { if (ignoreTimeoutException) { return(null); } throw new Exception(e.Message); } }
public async Task Should_be_wicked_fast() { var bus = Bus.Factory.CreateUsingInMemory(cfg => { cfg.UseBsonSerializer(); cfg.ReceiveEndpoint("input-queue", e => e.Handler <PingMessage>(async context => { await context.RespondAsync(new PongMessage(context.Message.CorrelationId)); })); }); await bus.StartAsync(); try { var client = new MessageRequestClient <PingMessage, PongMessage>(bus, new Uri("loopback://localhost/input-queue"), TimeSpan.FromSeconds(30)); int limit = 50000; int count = 0; await client.Request(new PingMessage()); Stopwatch timer = Stopwatch.StartNew(); await Task.WhenAll(Enumerable.Range(0, limit).Select(async x => { await client.Request(new PingMessage()); Interlocked.Increment(ref count); })); timer.Stop(); Console.WriteLine("Time to process {0} messages = {1}", count, timer.ElapsedMilliseconds + "ms"); Console.WriteLine("Messages per second: {0}", count * 1000 / timer.ElapsedMilliseconds); } catch (Exception exception) { Console.WriteLine(exception); } finally { await bus.StopAsync(); } }
/// <summary> /// request to a service /// </summary> /// <param name="address"></param> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task <TResponse> Request(Uri address, TRequest request, CancellationToken cancellationToken) { var requestTimeout = TimeSpan.FromSeconds(300); var client = new MessageRequestClient <TRequest, TResponse>(_bus, address, requestTimeout); return(client.Request(request, cancellationToken)); }
public static TResponse Request <TRequest, TResponse>(string queueName, TRequest request) where TRequest : class where TResponse : class { var config = (IServiceConfig)ConfigurationManager.GetSection("service"); IRequestClient <TRequest, TResponse> client = new MessageRequestClient <TRequest, TResponse>(Instance, new Uri(config.RabbitMq.GetQueueUrl(queueName)), TimeSpan.FromSeconds(30)); return(client.Request(request).Result); }
public async Task <TResponseMessage> SendRequest <TRequestMessage, TResponseMessage>(TRequestMessage requestMessage, string address) where TRequestMessage : class, IMessage where TResponseMessage : class, IMessage { var requestTimeout = TimeSpan.FromSeconds(30); var uri = new Uri(address); var requestClient = new MessageRequestClient <TRequestMessage, TResponseMessage>(_bus, uri, requestTimeout); return(await requestClient.Request(requestMessage, new CancellationToken())); }
public async Task <JsonResult> Index(string prefix) { var address = new Uri("rabbitmq://localhost/suggestions"); var requestTimeout = TimeSpan.FromSeconds(30); IRequestClient <IGetSuggestions, IReturnSuggestions> client = new MessageRequestClient <IGetSuggestions, IReturnSuggestions>(MvcApplication.BusControl, address, requestTimeout); IReturnSuggestions result = await client.Request(new { Prefix = prefix }); return(Json(result.Suggestions, JsonRequestBehavior.AllowGet)); }
private static void ExecuteSaga(IBusControl bus) { var address = new Uri($"loopback://localhost/req_resp_saga"); var requestClient = new MessageRequestClient <IStartSaga, MyResponse>(bus, address, TimeSpan.FromSeconds(30)); var response = requestClient.Request(new { CorrelationId = Guid.NewGuid(), Data = "Please do this" }) .GetAwaiter() .GetResult(); Console.WriteLine($"This was the result: {response.ResponseMessage}"); }
public async Task <IActionResult> Count() { var address = new Uri("rabbitmq://localhost/WordCount.Service"); var requestTimeout = TimeSpan.FromSeconds(30); var client = new MessageRequestClient <ICountRequest, ICountResponse>(_bus, address, requestTimeout); var response = await client.Request(new CountRequest(), CancellationToken.None).ConfigureAwait(false); return(Content($"<h1> Total: {response.Count} </h1>", "text/html", Encoding.UTF8)); }
public static async Task <TResponse> SendCommandWithRespond <TRequest, TResponse>(TRequest request, CancellationToken cancellationToken = default(CancellationToken)) where TRequest : class where TResponse : class { var address = new Uri("rabbitmq://localhost/commands"); var requestTimeout = TimeSpan.FromSeconds(30); IRequestClient <TRequest, TResponse> client = new MessageRequestClient <TRequest, TResponse>(Startup.Bus, address, requestTimeout); return(await client.Request(request, cancellationToken)); }
public async Task <IUserDataResponse> Get(int id) { var address = new Uri("rabbitmq://localhost/UserData"); var client = new MessageRequestClient <IUserDataRequest, IUserDataResponse>(_bus, address, TimeSpan.FromSeconds(30)); var response = await client.Request(new { Id = id }); //var addUserEndpoint = await _bus.GetSendEndpoint(new Uri("rabbitmq://localhost/UserData")); //await addUserEndpoint.Send<IUserDataRequest>(new {Id = 1}); return(response); }
/// <summary> /// Method to run the test case /// </summary> /// <param name="busControl"> /// The bus for the test case to use /// </param> public override async Task Run(BusControl busControl) { var hostUri = busControl.Instance.Address; var address = new Uri($"{hostUri.Scheme}://{hostUri.Host}/{QueueName}"); var requestTimeout = TimeSpan.FromSeconds(30); var requestClient = new MessageRequestClient <IRequestMessage, IResponseMessage>(busControl.Instance, address, requestTimeout); await SendMessages(message => requestClient.Request(message).ConfigureAwait(false) ); }
public DocumentsResponse?Request(DocumentInfo input) { try { var address = new Uri("rabbitmq://localhost/" + input.Type + "Request"); var requestTimeout = TimeSpan.FromSeconds(10); IRequestClient <Document, DocumentsResponse> requestClient = new MessageRequestClient <Document, DocumentsResponse>(bus, address, requestTimeout); return(requestClient.Request(input).Result); } catch (Exception) { return(null); } }
public async Task Test() { try { var serviceAddress = new Uri($"rabbitmq://localhost/{MvcApplication.QueueName}"); var requestClient = new MessageRequestClient <ITest, ITestResponse>(MvcApplication.Bus, serviceAddress, TimeSpan.FromSeconds(10)); var response = await requestClient.Request(new Test { Message = $"Test Request {DateTime.Now}" }); await Clients.All.TestResponse($"{DateTime.Now} - Got response: {response.Response}"); } catch (Exception ex) { await Clients.All.TestResponse($"{DateTime.Now} - Got exception:\n{ex.ToString()}"); } }
public async Task Request() { var bus = Bus.Factory.CreateUsingHttp(cfg => { var mainHost = cfg.Host(new Uri("http://localhost:8080")); //TODO: serializer? cfg.ReceiveEndpoint(ep => { ep.Consumer <HttpEater>(); }); }); var mc = new MessageRequestClient <Ping, Pong>(bus, new Uri("http://requestb.in/15alnbk1"), TimeSpan.FromMinutes(500)); await mc.Request(new Ping(), default(CancellationToken)); }
public async Task Should_work_with_the_message_request_client_too() { _hostAddress = new Uri("http://localhost:8080"); var busControl = Bus.Factory.CreateUsingHttp(cfg => { var mainHost = cfg.Host(_hostAddress, h => { h.Method = HttpMethod.Post; }); cfg.ReceiveEndpoint(mainHost, "", ep => { ep.Consumer <HttpRequestConsumer>(); }); }); await busControl.StartAsync(TestCancellationToken); try { IRequestClient <Request, Response> client = new MessageRequestClient <Request, Response>(busControl, _hostAddress, TimeSpan.FromSeconds(30)); var request = new Request { Value = "Hello" }; for (var i = 0; i < 5; i++) { var timer = Stopwatch.StartNew(); var result = await client.Request(request); timer.Stop(); await Console.Out.WriteLineAsync($"Request complete: {timer.ElapsedMilliseconds}ms, Response = {result.ResponseValue}"); } } finally { await busControl.StopAsync().WithTimeout(TimeSpan.FromSeconds(30)); } }
private void Authenticate(string userNameKey, string passwordKey) { var serviceConfig = (IServiceConfig)ConfigurationManager.GetSection("service"); var userName = ConfigurationManager.AppSettings[userNameKey]; var password = ConfigurationManager.AppSettings[passwordKey]; var url = new Uri(serviceConfig.RabbitMq.GetQueueUrl(WellKnownQueues.AccessControl)); IRequestClient <IAuthenticateUser, IAuthenticateUserResult> request = new MessageRequestClient <IAuthenticateUser, IAuthenticateUserResult>(Bus.Instance, url, TimeSpan.FromSeconds(30)); var result = request.Request(new AuthenticateUser(userName, password)).Result; if (!result.Authenticated) { throw new SecurityException($"Invalid credentials specified. Please check these settings {userNameKey} and {passwordKey} in the app.config file."); } // take care of automatical request authentication Bus.Instance.ConnectTicket(result.Ticket); }
private static async Task Work() { await _bus.StartAsync(); var requestClient = new MessageRequestClient <HelloWorld, HelloResponse>( _bus, new Uri("rabbitmq://10.211.55.10/prognet/test"), TimeSpan.FromMinutes(10)); await Task.WhenAll(Enumerable.Range(0, 1000).Select( async x => { var response = await requestClient.Request( new HelloWorld { Text = "Hi there" }, CancellationToken.None); Console.WriteLine(response.AmendedText); }).ToArray()); }
public async Task <ActionResult <string> > Get(int id) { Log.Info("WebApi Service: Get Values: {0}", id); var request = new GetValuesRequestMessage { Index = id }; try { var endpoint = new Uri($"rabbitmq://localhost/{Constants.ServiceQueue}"); var client = new MessageRequestClient <GetValuesRequestMessage, GetValuesResponseMessage>(_busHost.Bus, endpoint, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15)); var response = await client.Request(request); return(response?.Message); } catch (Exception e) { Log.Error(e, "Error getting value"); return(e.Message); } }
public void TestRequestResponse() { var address = "rabbitmq://localhost/"; var addressUri = new Uri(address); var queue = "UnitTests_MessageRequestResponse"; _busControl = MassTransit.Bus.Factory.CreateUsingRabbitMq(x => { var host = x.Host(addressUri, h => { }); x.ReceiveEndpoint(host, queue, e => e.Consumer(() => new PingCommandResponder())); }); _busControl.Start(); var requestTimeout = TimeSpan.FromSeconds(10); var queueUri = new Uri(address + queue); IRequestClient <IPingRequest, IPingResponse> client = new MessageRequestClient <IPingRequest, IPingResponse>(_busControl, queueUri, requestTimeout); var response = client.Request(new PingRequest { BoingsCount = 0 }).Result; Assert.AreEqual(response.BoingsCount, 1); }
public async Task Should_get_the_response_to_the_bus() { IRequestClient <PingMessage, PongMessage> client = new MessageRequestClient <PingMessage, PongMessage>(Bus, InputQueueAddress, TestTimeout); await client.Request(new PingMessage(), TestCancellationToken); }
public static void Start() { // load the Log4Net config from app.config XmlConfigurator.Configure(); var busControl = ConfigureBus(); busControl.Start(); do { Console.WriteLine("'q' to exit"); Console.WriteLine("'1' -> Request / response"); Console.WriteLine("'666' -> Request / exception"); Console.Write("> "); var value = Console.ReadLine(); if ("q".Equals(value, StringComparison.OrdinalIgnoreCase)) { break; } switch (value) { case "1": case "666": Console.Out.WriteLine( $"{DateTime.Now:O} Requesting status of OrderId {value}"); /* * create the request client * Creates the response queue bus-WINBOOK-MassTransit.Sandbox.RequestResponse-yyyyyyb8yyfyyx1zbdk5jec9r5 * with autodelete = true and expiration = 60000 ms */ var client = new MessageRequestClient <CheckOrderStatus, OrderStatusResult>(busControl, new Uri("rabbitmq://localhost/check_order_queue"), TimeSpan.FromSeconds(30)); try { // send the message expecting the response in the Task Result var result = client. Request(new CheckOrderStatus { OrderId = value }).Result; Console.Out.WriteLine( $"{DateTime.Now:O} Received status {result.StatusText} ({result.StatusCode}) for OrderId {result.OrderId}"); /* * The payload received in the response queue is * * { * * "messageId": "00000000-2700-0a00-8b04-08d5b4a2ef65", * * "requestId": "00000000-2700-0a00-e326-08d5b4a2ef63", * * "conversationId": "00000000-2700-0a00-3635-08d5b4a2ef64", * * "sourceAddress": "rabbitmq://localhost/check_order_queue", * * "destinationAddress": "rabbitmq://localhost/bus-WINBOOK-MassTransit.Sandbox.RequestResponse-yyyyyyb8yyfyy7r9bdk5jewgdd?durable=false&autodelete=true", * * "messageType": [ * * "urn:message:MassTransit.Sandbox.RequestResponse.Contracts:OrderStatusResult" * * ], * * "message": { * * "orderId": "1", * * "timestamp": "2018-05-08T07:17:03.6952914+02:00", * * "statusCode": 1, * * "statusText": "Sent" * * }, * * "sentTime": "2018-05-08T05:17:03.6952914Z", * * "headers": {}, * * "host": { * * "machineName": "WINBOOK", * * "processName": "MassTransit.Sandbox.RequestResponse", * * "processId": 13764, * * "assembly": "MassTransit.Sandbox.RequestResponse", * * "assemblyVersion": "1.0.0.0", * * "frameworkVersion": "4.0.30319.42000", * * "massTransitVersion": "5.0.0.1475", * * "operatingSystemVersion": "Microsoft Windows NT 6.2.9200.0" * * } * * } */ } catch (System.AggregateException e) { /* * The payload received in the response queue is * { * * "messageId": "00000000-2700-0a00-476f-08d5b4a2f145", * * "requestId": "00000000-2700-0a00-836c-08d5b4a2f141", * * "conversationId": "00000000-2700-0a00-c2b4-08d5b4a2f141", * * "sourceAddress": "rabbitmq://localhost/check_order_queue", * * "destinationAddress": "rabbitmq://localhost/bus-WINBOOK-MassTransit.Sandbox.RequestResponse-yyyyyyb8yyfyy7r9bdk5jewgdd?durable=false&autodelete=true", * * "messageType": [ * * "urn:message:MassTransit:Fault[[MassTransit.Sandbox.RequestResponse.Contracts:CheckOrderStatus]]", * * "urn:message:MassTransit:Fault" * * ], * * "message": { * * "faultId": "00000000-2700-0a00-3d20-08d5b4a2f145", * * "faultedMessageId": "00000000-2700-0a00-8b89-08d5b4a2f141", * * "timestamp": "2018-05-08T05:17:06.8458671Z", * * "exceptions": [ * * { * * "exceptionType": "System.InvalidOperationException", * * "stackTrace": " à MassTransit.Sandbox.RequestResponse.Consumers.CheckOrderStatusConsumer.<Consume>d__0.MoveNext() dans C:\\Users\\Eric\\Documents\\Work\\Github\\MassTransit.Sandbox\\MassTransit.Sandbox\\RequestResponse\\Consumers\\CheckOrderStatusConsumer.cs:ligne 15\r\n--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---\r\n à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n à MassTransit.Pipeline.ConsumerFactories.DefaultConstructorConsumerFactory`1.<Send>d__0`1.MoveNext()\r\n--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---\r\n à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n à MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.<GreenPipes-IFilter<MassTransit-ConsumeContext<TMessage>>-Send>d__4.MoveNext()", * * "message": "Order not found", * * "source": "MassTransit.Sandbox" * * } * * ], * * "host": { * * "machineName": "WINBOOK", * * "processName": "MassTransit.Sandbox.RequestResponse", * * "processId": 13764, * * "assembly": "MassTransit.Sandbox.RequestResponse", * * "assemblyVersion": "1.0.0.0", * * "frameworkVersion": "4.0.30319.42000", * * "massTransitVersion": "5.0.0.1475", * * "operatingSystemVersion": "Microsoft Windows NT 6.2.9200.0" * * }, * * "message": { * * "orderId": "666" * * } * * }, * * "sentTime": "2018-05-08T05:17:06.8458671Z", * * "headers": {}, * * "host": { * * "machineName": "WINBOOK", * * "processName": "MassTransit.Sandbox.RequestResponse", * * "processId": 13764, * * "assembly": "MassTransit.Sandbox.RequestResponse", * * "assemblyVersion": "1.0.0.0", * * "frameworkVersion": "4.0.30319.42000", * * "massTransitVersion": "5.0.0.1475", * * "operatingSystemVersion": "Microsoft Windows NT 6.2.9200.0" * * } * * } */ var exception = e.InnerException as RequestFaultException; if (exception != null) { // we've got an exception rasied by the consumer ! Console.WriteLine($"{DateTime.Now:O} {exception.Fault.Exceptions[0].Message}"); } else { // re-throw any unexpected exceptions throw; } } break; } } while (true); busControl.Stop(); }
public async Task Should_get_the_response_to_the_bus() { IRequestClient<PingMessage,PongMessage> client = new MessageRequestClient<PingMessage, PongMessage>(Bus, InputQueueAddress, TestTimeout); await client.Request(new PingMessage(), TestCancellationToken); }