Сериализация сообщений RabbitMQ / C # - PullRequest
0 голосов
/ 08 мая 2019

Привет, у меня возникли проблемы с сериализацией моих POCO через newtonsoft и rabbitMQ, они оба реализуют интерфейс IMessage, но сами POCO не разделяются между приложениями, чтобы подвести итог, у меня есть один интерфейс IMessage и два сообщения: классы IMessage, по одному на проект, но они имеют одинаковую структуру, поэтому я задаюсь вопросом, почему newtonsoft не могу их сериализовать.

Кстати, я пытаюсь понять, что некоторые люди https://github.com/devmentors разработали здесь.

Шаблоны выглядят так

pub публикует UserCreated -> шину rabbitmq -> подписчик получает UserCreated но UserCreated - это два разных класса, которые реализуют IEvent или какой-то другой маркерный интерфейс

абонент

using System;
using Core;
using Newtonsoft.Json;
using RawRabbit.vNext;

namespace Not
{
    class Sub
    {
        public void Subscribe<TMessage>() where TMessage : IMessage
        {
            var client = BusClientFactory.CreateDefault();
            client.SubscribeAsync<TMessage>(async (message, ctx) =>
                {
                    Console.WriteLine(typeof(Message));
                    Console.WriteLine(message);
                },
                c =>
                {
                    c.WithExchange(q => { q.WithName(typeof(Message).Name); });
                    c.WithRoutingKey("example");
                });
        }
    }
    class Message : IMessage
    {
        [JsonConstructor]
        public Message(string body)
        {
            Body = body;
        }

        public string Body { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Sub");
            var sub = new Sub();
            sub.Subscribe<Message>();
            Console.ReadLine();
        }
    }
}

и мой издатель

using System;
using Core;
using Newtonsoft.Json;
using RawRabbit.vNext;

namespace Acceptable
{

    public class Message : IMessage
    {
        public string Body { get; set; }

        [JsonConstructor]
        public Message(string body)
        {
            Body = body;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Pub");
            var client = BusClientFactory.CreateDefault();
            while (true)
            {
                var input = Console.ReadLine();
                var message = new Message(input);
                client.PublishAsync(message, configuration: c =>
                {
                    c.WithRoutingKey(typeof(Message).Name);
                    c.WithExchange(e => e.WithName(typeof(Message).Name));
                });
            }
        }
    }
}

В настоящее время я получаю эту ошибку https://i.imgur.com/hvHiXWw.png

'Тип, указанный в JSON' Acceptable.Message, Acceptable, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'не совместим с «Not.Message, Not, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нуль. Путь '$ type', строка 1, позиция 51. '

и я не знаю, почему они не совместимы, они оба реализуют IMessage и имеют одинаковые реквизиты.

...