Sometimes when we use message broker we will want to wait for a response (like in RPC mechanism) – instead of relying on the publish or subscribe (which i present here).
Here EasyNetQ comes to help. It offerds us messaging pattern – request / response.
Request / response
To make it easier to understand this, let me give you an example.
One application sends a request for product list and waits for a response from the second application.
Command class (this one we send):
public class ReturnProductList { public int Records { get; set; } }
Event class (this one we are waiting for):
public class ReturnedProductList { public List<Product> ProductList { get; set; } }
And here is short example, in API I want to display a list product with the appropriate number of records that will return us from another service via respond.
[HttpGet] public JsonResult Get (int listCount) { var messageBus = RabbitHutch.CreateBus("host=localhost"); var response = messageBus.Request<ReturnProductList, ReturnedProductList>(new ReturnProductList { Records = 5 }); return Json(JsonConvert.SerializeObject(response)); }
And the respond:
messageBus.Respond<ReturnProductList, ReturnedProductList>(request => new ReturnedProductList { ProductList = GenerateProductList().Take(request.Records).ToList() });
Thanks to this mechanism, we will receive a simple information exchange with the request response messaging pattern.
Here is full example.