首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RawRabbit序列化问题

RawRabbit序列化问题
EN

Stack Overflow用户
提问于 2017-10-24 21:35:58
回答 1查看 942关注 0票数 1

我正在尝试使用RawRabbit实现一个图像处理服务,该服务将接收要处理的图像,并将提取的信息返回到另一个队列。在删除了所有不必要的代码之后,我意识到我面临的问题是当我从订阅委托中调用发布时。

有人知道我做错了什么吗?我的应用程序基于.Net核心2.0

下面是我订阅的方法。

代码语言:javascript
复制
public async Task StartListening()
    {
        try
        {
            _log.InfoFormat("Preparing to subscribe to queue messages");

            LoadConfiguration();

            CreateBusClient();
            _log.DebugFormat("BusClient created, calling subscribe");

            _client.SubscribeAsync<string>((msgStr, context) =>
            {

                _client.PublishAsync("test", default(Guid), cfg => cfg.WithExchange(exc => exc.WithName("face_process_exchange").WithType(ExchangeType.Direct)).WithRoutingKey("face_process_response"));
                return Task.FromResult(true);

            }, cfg => cfg.WithExchange(exc => exc.WithName(_configuration.Exchange).WithType(ExchangeType.Direct)).
                        WithRoutingKey(_configuration.RoutingKeyToListen).
                        WithQueue(q => q.WithName(_configuration.QueueToListen)).
                        WithSubscriberId(""));

            _log.Info("Subscribed to queue");
        }
        catch(Exception e)
        {
            _log.ErrorFormat("Failed to subscribe to queue: {0}", e.ToString());
        }
    }

下面是我创建BusClient的方法;

代码语言:javascript
复制
private void CreateBusClient()
    {
        var busConfig = new RawRabbitConfiguration
        {
            Username = _configuration.ConnectionUsername,
            Password = _configuration.ConnectionPassword,
            Port = _configuration.ConnectionPort,
            VirtualHost = "/",
            Hostnames = { _configuration.Hostname },
            RouteWithGlobalId = false
        };

        _log.DebugFormat("Calling BusClientFactory.CreateDefault for _configuration read as: {0}", _configuration.ToString());

        var addCfg = new Action<IServiceCollection>(s => s.AddSingleton(p => busConfig));
        var serviceProvider = new ServiceCollection().AddRawRabbit<AdvancedMessageContext>(null, addCfg).BuildServiceProvider();

        var cs = serviceProvider.GetService<IBusClient<AdvancedMessageContext>>();
        _client = new RawRabbit.vNext.Disposable.BusClient<AdvancedMessageContext>(cs);
    }
代码语言:javascript
复制

问题是,当调用PublishAsync时,我总是得到以下异常。

代码语言:javascript
复制
 `System.Runtime.Serialization.SerializationException: Serializing delegates is not supported on this platform.    at System.MulticastDelegate.GetObjectData(SerializationInfo info, StreamingContext context)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeISerializable(JsonWriter writer, ISerializable value, JsonISerializableContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)    at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)    at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)    at RawRabbit.Context.Provider.MessageContextProviderBase1.SerializeContext(TMessageContext messageContext)    at RawRabbit.Context.Provider.MessageContextProviderBase1.GetMessageContext(Guid& globalMessageId)    at RawRabbit.Operations.Publisher1.PublishAsync[TMessage](TMessage message, Guid globalMessageId, PublishConfiguration config)    at RawRabbit.Common.BaseBusClient1.PublishAsync[T](T message, Guid globalMessageId, Action1 configuration)    at RawRabbit.vNext.Disposable.BusClient1.PublishAsync[T](T message, Guid globalMessageId, Action&grave;1 configuration)    at SimpleID.FaceProcessing.Services.Implementation.RawRabbitQueueService.b__11_0(String msgStr, AdvancedMessageContext context)`
EN

回答 1

Stack Overflow用户

发布于 2018-09-20 02:05:01

这个问题被发布在RawRabbit回购上,并由回购主(@pardahlman)回答:

https://github.com/pardahlman/RawRabbit/issues/286

我相信这是AdvancedMessageContext的一个问题。可以修复,但需要注册自定义内部服务。在我详细介绍之前:您认为迁移到2.0 (目前在rc1中)是完全可行的吗?这不再是那个客户的问题了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46920433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档