Почему nservicebus игнорирует мое сообщение о подписке? - PullRequest
2 голосов
/ 29 октября 2011

У меня есть два простых консольных приложения для интеграции nservicebus. Один - издатель, другой - подписчик. Подписчик в этом случае также получает другие сообщения через Send() от еще одного веб-приложения. Когда я запускаю их локально в моей среде разработки, проблем нет, все работает как положено. Я могу отправлять сообщения из веб-приложения и получать их от моего «подписчика», а также получать опубликованные сообщения от моего подписчика.

Однако при развертывании на Server 2008 R2 подписчик отправляет исходное сообщение издателю StatusQueue со следующим содержимым:

<?xml version="1.0"?>
<Messages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.net/NServiceBus.Unicast.Transport">
    <CompletionMessage>
        <ErrorCode>0</ErrorCode>
    </CompletionMessage>
</Messages>

Я думаю, что это просто начальное "Я хочу подписаться на сообщения, которые вы публикуете, типа Сообщения. *". Это сообщение просто находится в очереди и никогда не принимается издателем.

Конфигурация издателя:

<MsmqSubscriptionStorageConfig 
    Queue="StatusQueueSubscriptions" />

    <MsmqTransportConfig
        InputQueue="StatusQueue"
        ErrorQueue="StatusError"
        NumberOfWorkerThreads="1"
        MaxRetries="5"/>

Конфигурация подписчика:

<MsmqTransportConfig
    InputQueue="AppsInputQueue"
    ErrorQueue="AppsError"
    NumberOfWorkerThreads="1"
    MaxRetries="5"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Messages" Endpoint="StatusQueue"/>
    </MessageEndpointMappings>
  </UnicastBusConfig>

1 Ответ

1 голос
/ 30 октября 2011

Вероятная причина, по которой ваша подписка игнорируется, заключается в том, что входящее сообщение издателю не соответствует типу, определенному в вашей подписке.

Поэтому, когда издатель получает сообщение, он сравнивает его с имеющимися в нем подписками и не находит совпадений, поэтому вашему подписчику не будет отправлено сообщение.

Это может быть потому, что тип сообщения в NServiceBus определяется не только именем сборки / типа, но и версией сборки и токеном открытого ключа.

Проверьте версии / PK токены сборок сообщений, хранящихся у издателя и подписчика, и убедитесь, что они точно совпадают.

UPDATE

ОК, похоже, что разрешения вашей входной очереди каким-то образом мешают вашей учетной записи издателя читать сообщения. Попробуйте дать полный контроль над учетной записью службы.

Кроме того, проверяли ли вы местоположение журнала по умолчанию на наличие ошибок в журнале? (C: \ Users (имя пользователя) \ AppData \ Local \ Temp)

...