Исключение при использовании сообщения с EasyNetQ - PullRequest
1 голос
/ 14 января 2020

Я использую easyNetQ для публикации sh и получения сообщения из очереди, но ..

Исключение при получении сообщения из очереди.

The server reported 0 messages 
Exchange    ErrorExchange_
type:   EasyNetQ.SystemMessages.Error, EasyNetQ

"RoutingKey": "", "Exchange": "SSO.Login", "Queue": "SSO.Login_SSOQueue.LoginQueue", "Exception": "System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'OAuth.Admin.Infrastructures.RabbitMQEventBus , Culture = нейтральный, PublicKeyToken = null '. Системе не удается найти указанный файл. \ R \ nИмя файла:' OAuth.Admin.Infrastructures.RabbitMQEventBus, Culture = нейтральный, PublicKeyToken = null '\ r \ n в System.Reflection. RuntimeAssembly.nLoad (AssemblyName имя_файла, строка CodeBase, RuntimeAssembly locationHint, StackCrawlMark & ​​stackMark, IntPtr pPrivHostBinder, булева throwOnFileNotFound, IntPtr ptrLoadContextBinder) \ г \ п на System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, RuntimeAssembly reqAssembly, StackCrawlMark & ​​stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder) \ r \ n в System.Reflection.Assembly.Load (AssemblyName assemblyRef) \ r \ n в EasyNetQ.DefaultTypeNameSerializer.GetTypeFromTypeNameKey (TypeNameKey typeNameKey) \ r \ n в EasyNetQ.DefaultTypeNameSerializer. <0 * 101_. st0. \ r \ n в System.Collections.Concurrent.ConcurrentDictionary <code>2.GetOrAdd(TKey key, Func 2 valueFactory) \ r \ n в EasyNetQ.DefaultMessageSerializationStrategy.DeserializeMessage (свойства MessageProperties, тело Byte []) \ r \ n в EasyNetQ.RabbitAdvancedBus. <> c__D. b__0 (тело Byte [], свойства MessageProperties, MessageReceivedInfo messageReceivedInfo) \ r \ n в EasyNetQ.RabbitAdvancedBus. <> c__DisplayClass21_0.b__0 (тело байта [], свойства MessageProperties, MessageReceivedInfo полученныйInfo) \ r \ n в EasyNetQ. InvokeUserMessageHandlerInternalAsyn c (контекст ConsumerExecutionContext) \ r \ n \ r \ n "," Message ":" {\ "PhoneNumber \": \ "09 --------- \", \ "ApplicationName \" : \ "somthing \", \ "CampaignId \": 2} "," DateTime ":" 2020-01-14T05: 37: 19.9778013Z ",

эта сборка i s в моем издателе , то есть отдельном приложении

"Exception":"System.IO.FileNotFoundException: Could not load file or assembly 'OAuth.Admin.Infrastructures.RabbitMQEventBus, Culture=neutral, PublicKeyToken=null'.

1 Ответ

1 голос
/ 25 января 2020

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

protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        stoppingToken.ThrowIfCancellationRequested();

        var consumer = new EventingBasicConsumer(_channel);

        consumer.Received += HandleMessageAsync; ;

        _channel.BasicConsume("BlaBlaBlaQueue", false, consumer);
        return Task.CompletedTask;
    }

    private async void HandleMessageAsync(object sender, BasicDeliverEventArgs e)
    {
        var content = System.Text.Encoding.UTF8.GetString(e.Body);
        ConfirmRequest confirmRequest  = JsonConvert.DeserializeObject<ConfirmRequest>(content);

        var result =await sendConfirmBlaBlaBlaResuest.ConfirmBlaBlaBlaAsync(new BlaBlaBlaDto {});
        var responce = new ConfirmBlaBlaBlaResponceEvent(confirmRequest);

        if (result.IsFailure)
        {
            responce.Message = result.Error;
            responce.IsSuccess = false;
        }
        else
        {
            responce.IsSuccess = true;
        }

        await bus.PublishBlaBlaBlaResponceEventAsync(responce);
        _channel.BasicAck(e.DeliveryTag, false);
    }

, а мой производитель -

public async Task PublishBlaBlaBlaEventAsync(BlaBlaBlaEvent myEvent)
    {
        var exchange = _bus.ExchangeDeclare(rabbitOptions.BlaBlaBlaExchangeName, ExchangeType.Topic);
        var queue = _bus.QueueDeclare(rabbitOptions.BlaBlaBlaQueueName);
        _bus.Bind(exchange, queue, "#");
        var message = new Message<BlaBlaBlaEvent>(myEvent);
        await _bus.PublishAsync(exchange, queue.Name, false, message);
    }
...