</h1>
<div class="clear"></div>
<div class="postBody">
随着SOA、微服务、CQRS的盛行,EventBus越来越流行,上GitHub搜了一下,还是有蛮多的这类实现,老牌的有NServiceBus(收费)、MassTransit,最近的有CAP(国人写的,1.4k个Star,非常不错)、ReBus(张队长在NanoFabric中推荐的)、RawRabbit等,今天我介绍的是另外一款产品:EasyNetQ,支持.net core,正如其名,用起来确实very easy。
首先在asp.net core项目中添加EasyNetQ的nuget引用,注入:
public void ConfigureServices(IServiceCollection services) { string rabbitMqConnection = Configuration["RabbitMqConnection"]; services.AddSingleton(RabbitHutch.CreateBus(rabbitMqConnection)); }
1、发布消息:
public class ValuesController : Controller { private IBus _bus; public ValuesController(IBus bus) { _bus = bus; }</span><span style="color: #008000;">//</span><span style="color: #008000;"> POST api/values</span>
[HttpPost]
public async Task Post([FromBody]Order message)
{
await _bus.PublishAsync(message);
}
}
可自定义消息的Exchange和Queue,需要修改消息实体:
[Queue("Qka.Order", ExchangeName = "Qka.Order")] public class Order { public int OrderId { get; set; } }
2、订阅消息
我们订阅的服务也是寄宿在asp.net core程序中,首先定义消费者:
public class OrderConsumer : IConsume<Order> { [AutoSubscriberConsumer(SubscriptionId = "OrderService")] public void Consume(Order message) { //业务代码 } }
也可以使用异步方法:
public class OrderConsumer : IConsumeAsync<Order> { [AutoSubscriberConsumer(SubscriptionId = "OrderService")] public Task ConsumeAsync(Order message) { //业务代码 } }
利用EasyNetQ的自动订阅者进行订阅,这里扩展IApplicationBuilder:
public static class ApplicationExtenssion { public static IApplicationBuilder UseSubscribe(this IApplicationBuilder appBuilder, string subscriptionIdPrefix, Assembly assembly) { var services = appBuilder.ApplicationServices.CreateScope().ServiceProvider;</span><span style="color: #0000ff;">var</span> lifeTime = services.GetService<IApplicationLifetime><span style="color: #000000;">(); </span><span style="color: #0000ff;">var</span> bus = services.GetService<IBus><span style="color: #000000;">(); lifeTime.ApplicationStarted.Register(() </span>=><span style="color: #000000;"> { </span><span style="color: #0000ff;">var</span> subscriber = <span style="color: #0000ff;">new</span><span style="color: #000000;"> AutoSubscriber(bus, subscriptionIdPrefix); subscriber.Subscribe(assembly); <br></span> subscriber.SubscribeAsync(assembly);<br><span> }); <br><br> lifeTime.ApplicationStopped.Register(() </span>=><span> { bus.Dispose(); }); <br><br></span><span style="color: #0000ff;"> return</span><span> appBuilder; <br> } <br>}</span></pre>
使用扩展方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSubscribe("OrderService", Assembly.GetExecutingAssembly()); }
SpringCloud -创建统一的依赖管理
Mysql、Oracle、SQLServer等数据库参考文档免费分享下载
DevExpress的图形按钮菜单栏控件WindowsUIButtonPanel的布局、使用和设置按钮的点击事件
Winform中设置ZedGraph鼠标滚轮缩放的灵敏度以及设置滚轮缩放的方式(鼠标焦点为中心还是图形中心点)
Winform中设置多条Y轴时新增的Y轴刻度不显示问题解决
Winforn中设置ZedGraoh的GraphPane恢复到初始比例大小
Winform中设置ZedGraph多条Y轴时与多条曲线一一对应
Winform中设置ZedGraph多条Y轴时坐标轴左右显示设置
一、关于a标签伪类中的visited不起作用问题