小编jen*_*s_h的帖子

RabbitMQ:交换确认的消息,没有任何现有的绑定

我正在向没有任何队列绑定的主题交换发送消息。只是一个空白的交换。通道创建为确认通道,每次发送消息时都会调用我的确认回调。奇怪的是,对于我收到的每条消息。

我是否做错了什么或误解了发布者确认的工作方式?我如何知道消息是路由到队列还是被交换器丢弃?

我正在使用 amqplib 作为节点。


好吧,可能我没有足够清楚地解释我的问题。所以这里有一些代码:

var amqp = require('amqplib/callback_api');
amqp.connect('amqp://host' , function(err, conn) {

    conn.createConfirmChannel(function(err, ch) {

        channel.assertExchange('my_awsome_exchange', 'topic', {durable: true});

        channel.publish('my_awsome_exchange', 'routing_key', new Buffer('some data'),
        {
            mandatory: true
        },
        function(err){
           // err is null no matter if a queue is bound to the exchange or not
           console.log(err);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

如您所见,创建了一个交换,但还没有队列绑定到这个交换。所以我的期望是向这个交换发送消息永远不会被确认。@Teddy:我从文档中知道这一部分,这就是我如此困惑的原因。由于消息没有路由到任何队列,我本来希望消息会被拒绝。

amqp rabbitmq

3
推荐指数
1
解决办法
6484
查看次数

过滤数组并返回特定属性

我有以下预测:

db.tickets.aggregate([
{
  $match: {
    "satisfaction_rating.id": {"$exists": true}
  }
},
{
  $project: {
    "ticketId": "$id",
    "employee": "$assignee.name",
    "subject": "$subject",
    "memberId": {
      "$filter": {
         "input": "$custom_fields",
         "as": "field",
         "cond": {"$eq": ["$$field.id", 24685851]}
       }
    },
    "requester": "$requester.name",
    "created": "$created_at",
    "solved": "$metric_set.solved_at",
    "resolutionTimeInHours": {"$trunc": {"$divide": ["$metric_set.full_resolution_time_in_minutes.business", 60]}},
    "score": "$satisfaction_rating.score",
    "comment": "$satisfaction_rating.comment"
  }
},
{
  $out: "satisfaction"
}]);
Run Code Online (Sandbox Code Playgroud)

$ filter返回一个数组。我想要做的是拾取第一个元素并获得一个属性,该属性然后应绑定到memberId而不是一个元素的数组。

我环顾了一段时间,但没有找到合适的解决方案。谁能给我一个提示?

mongodb mongodb-query aggregation-framework

2
推荐指数
1
解决办法
774
查看次数