0

それぞれのユーザーに取得するメッセージのリストをルーティングする必要があるシナリオがあります。私が持っていると仮定します

messages = [
  { text: 'hi', user_id: 1 },
  { text: 'hi', user_id: 2 },
  { text: 'hi', user_id: 3 },
  { text: 'hi', user_id: 4 },
  { text: 'hi', user_id: 5 },
];

プロデューサー.js

var amqp = require('amqplib/callback_api');

amqp.connect('amqps://dgszsgqj:C_wg8fkFrcl6ukZjxBjCcpgc_Pa2j-r9@snake.rmq2.cloudamqp.com/dgszsgqj', function(error0, connection) {
  if (error0) {
    throw error0;
  }
  connection.createChannel(function(error1, channel) {
    if (error1) {
      throw error1;
    }
    var exchange = 'messages';
  
    channel.assertExchange(exchange, 'direct', {
      durable: false
    });
    messages = [
      { text: 'hi', user_id: 1 },
      { text: 'hi', user_id: 2 },
      { text: 'hi', user_id: 3 },
      { text: 'hi', user_id: 4 },
      { text: 'hi', user_id: 5 },
    ];
    messages.map(message=>{
      channel.publish(exchange, message.user_id+'', message.text);
    })
  });
});

consumer.js

var amqp = require('amqplib/callback_api');

var args = process.argv.slice(2);

if (args.length == 0) {
  console.log("Usage: receive_logs_direct.js [info] [warning] [error]");
  process.exit(1);
}

amqp.connect('amqps://localhost', function(error0, connection) {
  if (error0) {
    throw error0;
  }
  connection.createChannel(function(error1, channel) {
    if (error1) {
      throw error1;
    }
    var exchange = 'messages';

    channel.assertExchange(exchange, 'direct', {
      durable: false
    });

    // Not sure how to consume messages separately for each user.
    // channel.assertQueue()
  });
});

キューを動的に作成することはアンチパターンであるというブログを読みました。 https://derickbailey.com/2015/09/02/rabbitmq-best-practices-for-designing-exchanges-queues-and-bindings/

プロデューサー側でもキューを作成しようとしましたが、これはキューを作成していますが、キューを消費するときにキューの名前を知らないため、そのキューからのメッセージを消費できませんでした。

このケースを効率的に処理するにはどうすればよいですか?

4

0 に答える 0