算是搞了一大中午,切身的效果出来了,但是感觉效果不是很好,链接容易断。
但是还是切实体会到分布式的效果,Received不用及时的去接收信息。你只管去发送信息,不用管接收的。接收的指令,运行起来后,程序会自动的从Rabbitmq中获取信息。
先熟悉三个Url:
1:https://localhost:44360/api/values(本地项目运行)
2:http://localhost:15672/#/(RabbitMq)
3:https://localhost:44360/cap/(CAp的仪表盘)
首先:
先创建webapi的项目:
namespace CapLinkMQ.Controllers { [Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { private readonly B2BContext _accb2b; private readonly ICapPublisher capPublisher; public ValuesController(B2BContext _acc, ICapPublisher Cap) { _accb2b = _acc; capPublisher = Cap; } //发送 //[HttpGet] //public async Task<ActionResult> PutOrderToWms() //{ // ActionResult result = null; // await capPublisher.PublishAsync("sample.rabbitmq.prozkb", "zkb"); // return result; //}
//接收 [CapSubscribe("sample.rabbitmq.prozkb")] public async Task Receive(string parameters) { Console.WriteLine(parameters); } } }
然后是Sartup中进行配置
namespace CapLinkMQ { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext<_B2BContext>(); services.AddCap(x => { x.UseEntityFramework<_B2BContext>();//会在这个表中生成Cap.Published 和Cap.Received 两个表 x.UseRabbitMQ(optional =>//配置RabbitMQ { optional.HostName = "127.0.0.1"; optional.Password = "guest"; optional.UserName = "guest"; }); x.UseDashboard(); } ); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddApiVersioning(option => { option.ReportApiVersions = true; option.AssumeDefaultVersionWhenUnspecified = true; option.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } app.UseCap();///////////////// app.UseHttpsRedirection(); app.UseMvc(); } } }
贴几张效果图:
在运行订阅端之前,订阅列表是0。运行订阅端后,就是1了。
下面的Connections 有时候链接不上,不用担心,它自己会链接上的,我用的时候也是有时候连接不上(体验不好),但是只要程序运行着,他自己会自己链接的,他自己真会链接上的,反正我是这样的。
Content:{"Id":"5e8d6a6e16ee345114c26cc8","Timestamp":"2020-04-08T14:08:46.3887716+08:00","Content":"lisi","CallbackName":null}
第一种当运行程序,发布数据,把数据塞入到Published中,StatusName是Scheduled 这是没有将数据塞入到MQ中,可能是因为没有链接上。
如果链接上了,就是会变成Succeed,将数据塞入MQ。
{"Id":"5e8d6a6e16ee345114c26cc8","Timestamp":"2020-04-08T14:08:46.3887716+08:00","Content":"lisi","CallbackName":null}