由Masstransit ReceiveFrom方法和消费者行为混淆

时间:2017-10-17 20:12:58

标签: .net rabbitmq message-queue masstransit

我想用RabbitMq创建一个队列,我将在一侧发送一些消息并在另一个应用程序中接收。我正在使用以下代码:

function Codes() {
  var DeInf = "No Public Developer Info yet.";
  var Error = "By the time you've read this the page has closed itself already";
  var idx = '<a href="index.html">Get to the Index!</a>';
  var Errore = "No recognised Code!";   
  var B2 = document.getElementById("CodeInput").value;
  var A1 = B2.toLowerCase().trim();
  var info = document.getElementById("info");

  switch (A1) {
    case 'devinfo':
      // Fall-through intended
    case 'developerinfo':
      info.textContent = DeInf;
      break;
    case 'error':
      info.textContent = Error;
      close();
      break;
    case 'newtons pendulum':
      // Fall-through intended
    case 'newton':
      // Fall-through intended
    case 'pendulum':
      info.textContent = Newton;
      break;
    case 'binary':
      info.innerHTML = "11111100001";
      break;
    case 'index':
      info.innerHTML = idx;
      break;
    case 'randomnumber':
      info = Math.floor((Math.random() * 1000) + 1);
      break;
    default:
      info.textContent = Errore;
      break;
  }
}

MessageUrn uri和ReceiveFrom应该具有相同的uri,否则为ReceiveFrom方法指定的uri将确定总线端点。但这意味着我的发布者也是同一队列的消费者。当没有接收者时,所有消息都转到queuename_error队列。当有接收器时,一切似乎都没问题。

我做错了什么?我理解为什么消息会转到错误队列 - 因为发布者没有订阅它们,但同时他也是消费者 出现错误情况。当(重新)启动接收器时,是否可以从错误队列中恢复消息?

masstransit是2.10.0.0。

提前致谢。

1 个答案:

答案 0 :(得分:2)

.ReceiveFrom()地址对于每个服务应该是唯一的,并且仅在服务具有相同的消费者且消费相同的消息类型时才共享。使用相同RabbitMQ服务器的服务之间唯一的共同点是主机(和虚拟主机,如果使用的话)。否则,他们必须是不同的。

是的,他们会进入错误队列,因为发布者没有订阅它们。为您的发布者提供不同的队列名称,问题就解决了。