使用RabbitMQ在asp.net核心Web Api之间进行相互通信

时间:2018-02-08 01:15:29

标签: rabbitmq microservices asp.net-core-webapi

我有两个网络API。

在调用特定控制器(工作)时发布消息

一个订阅接收消息。 (不工作)

Solution folder

这是web api的配置:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddRawRabbit();

        var builder = new ContainerBuilder();
        builder.RegisterRawRabbit("guest:guest@localhost:15672/");
        var container = builder.Build();
    }

在web api 1中,这是发布消息的动作:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        EventMessage message = new EventMessage() ;
        var client = BusClientFactory.CreateDefault();

        message = new EventMessage() { id = new Guid(), createDate = DateTime.Now };
            client.PublishAsync<EventMessage>(message);

        Console.WriteLine($"message create {message.ToString()}");
        return new string[] { "value1", "value2",};
    }
}

在web api 2中,我不知道如何接收该消息, 这是我尝试但不起作用的方式

public class Listener
{
    public static void Start()
    {
            var client = BusClientFactory.CreateDefault());

            client.SubscribeAsync<EventMessage>(async (msg, context) => Console.WriteLine($"Recieved:{msg.createDate.ToString()}.");


    }
}
public class Program
{
    public static void Main(string[] args)
    {

        //not working
        Listener.Start();


        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

在这个项目中,我使用Rawrabbit,任何具有相同场景的库都可以。感谢

更新:我修复此代码,它可以正常工作

0 个答案:

没有答案