RabbitMQ队列名称已定义

igetnqfo  于 2022-11-23  发布在  RabbitMQ
关注(0)|答案(1)|浏览(158)

我开始从事微服务的工作,所以我做了两个Restful API。
1.组织API(GET、PUT、POST、DELETE)
1.客户API(GET、PUT、POST、DELETE)
这两个API是独立的,并且托管在本地IIS的不同端口上。
现在我想在我的主应用程序中使用它们。
因此,要求仅通过网络连接调用它们。
我发现我需要使用Rpc,gRpc或Kafka。
因此,我决定通过使用RabbitMq和EasyNetQ来使用RPC。
通过这个,我已经在docker中配置了rabbiqMq,并且它运行成功。
我不明白的是,在我的组织和客户API中有多个操作。GET、PUT、POST、DELETE
因此,我需要为这些方法定义队列名称,这样我就可以在主应用程序中使用它,方法是使用某个名称进行调用,它将直接调用该方法.
例如:

var factory = new ConnectionFactory() { HostName = "localhost" };
        var connection = factory.CreateConnection();
        var channel = connection.CreateModel();
        var body = Encoding.UTF8.GetBytes(entity);
        channel.BasicPublish(exchange: "organisations", routingKey: "organisations.add", basicProperties: null, body: body);

Where in the organisations api, I will define this organisations.add, organisations.update, organisations.search ?
我可以通过一些中介动态添加它们吗?或者我需要在rabitmq ui ..中手动添加到添加队列?

1szpjjfi

1szpjjfi1#

我通常使用IBus.Publish来发布消息,它支持强类型,而且它会自动检测ExchangeQueue名称。
让我们假设您有一个Message类来添加组织,如下所示:

[Queue("Organisations.Add", ExchangeName = "Organisations.Add")]
public class Message
{
    public string Text { get; set; }
    public DateTime Date { get; set; }
}

对于向代理发布消息:

using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
    var message = new Message() { Text = "Hello World", Date = DateTime.Now };
    bus.Publish<Message>(message);
}

因此,您可以基于API创建多个消息,并在Mediator中使用它们。

相关问题