Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于RabbitMQ消息消耗ID(c#API)_C#_Api_Message Queue_Rabbitmq - Fatal编程技术网

基于RabbitMQ消息消耗ID(c#API)

基于RabbitMQ消息消耗ID(c#API),c#,api,message-queue,rabbitmq,C#,Api,Message Queue,Rabbitmq,我想发布/生成一条带有某个消息id的消息,就像每条消息都有一个特定id一样 在消费者端,我想通过对ID进行私有化来检索消息。 假设我们有多个消费者,而每个消费者应该只获得他们通过消息ID请求的那些消息。(我希望我已经说得够清楚了)。您最好使用数据库来实现这一点 alexis(rabbitmq)尽管它不是设计的,使用数据库更好,但是有一种方法可以使用rabbitmq实现这一点: 发布id为的消息: var message = "some message"; var messageId = Guid

我想发布/生成一条带有某个消息id的消息,就像每条消息都有一个特定id一样

在消费者端,我想通过对ID进行私有化来检索消息。
假设我们有多个消费者,而每个消费者应该只获得他们通过消息ID请求的那些消息。(我希望我已经说得够清楚了)。

您最好使用数据库来实现这一点


alexis(rabbitmq)

尽管它不是设计的,使用数据库更好,但是有一种方法可以使用rabbitmq实现这一点:

发布id为的消息:

var message = "some message";
var messageId = Guid.NewGuid().ToString();
var factory = new ConnectionFactory { HostName = "localhost" };

using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    IBasicProperties props = channel.CreateBasicProperties();
    props.MessageId = messageId;

    byte[] messageBodyBytes = Encoding.UTF8.GetBytes(message);

    channel.BasicPublish("", "queueName", true, props, messageBodyBytes);
}
var messageId = "id";
var factory = new ConnectionFactory { HostName = "localhost" };

using (var connection = _factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    var queueDeclareResponse = channel.QueueDeclare("queueName", true, true, false, null);

    for (int i = 0; i < queueDeclareResponse.MessageCount; i++)
    {
        var result = channel.BasicGet("queueName", false);
        var id = result.BasicProperties.MessageId;

        if (id == messageId)
        {
            var body = result.Body;
            var message = Encoding.UTF8.GetString(body);

            //Do something with the message

            channel.BasicAck(result.DeliveryTag, false);
            break;
        }
    }
}
通过id获取消息:

var message = "some message";
var messageId = Guid.NewGuid().ToString();
var factory = new ConnectionFactory { HostName = "localhost" };

using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    IBasicProperties props = channel.CreateBasicProperties();
    props.MessageId = messageId;

    byte[] messageBodyBytes = Encoding.UTF8.GetBytes(message);

    channel.BasicPublish("", "queueName", true, props, messageBodyBytes);
}
var messageId = "id";
var factory = new ConnectionFactory { HostName = "localhost" };

using (var connection = _factory.CreateConnection())
using (var channel = connection.CreateModel())
{
    var queueDeclareResponse = channel.QueueDeclare("queueName", true, true, false, null);

    for (int i = 0; i < queueDeclareResponse.MessageCount; i++)
    {
        var result = channel.BasicGet("queueName", false);
        var id = result.BasicProperties.MessageId;

        if (id == messageId)
        {
            var body = result.Body;
            var message = Encoding.UTF8.GetString(body);

            //Do something with the message

            channel.BasicAck(result.DeliveryTag, false);
            break;
        }
    }
}
var messageId=“id”;
var factory=newconnectionfactory{HostName=“localhost”};
使用(var connection=\u factory.CreateConnection())
使用(var channel=connection.CreateModel())
{
var queuedeclarereresponse=channel.QueueDeclare(“queueName”,true,true,false,null);
for(int i=0;i

频道
被释放后,所有未被确认的消息将重新发出。

好的,我知道我将不得不涉及数据库。请你再详细说明一下我打算做什么,这样像我这样的乞丐才能理解。谢谢你的回复。