Home > Mobile >  problem with masstransit dynamic event publish ( json event )
problem with masstransit dynamic event publish ( json event )

Time:10-14

we need publish multiple event as json string from DB. publish this json event by masstransit like this:

   using var scope = _serviceScopeFactory.CreateScope();
            var sendEndpointProvider = scope.ServiceProvider.GetService<ISendEndpointProvider>();
            var endpoint = await sendEndpointProvider.GetSendEndpoint(new System.Uri("exchange:IntegrationEvents.DynamicEvent:DynamicEvent"))
            var json = JsonConvert.SerializeObject(dynamicObject, Newtonsoft.Json.Formatting.None);// sample 
            var obj = JsonConvert.DeserializeObject(json, new JsonSerializerSettings { });
            await endpoint.Send(obj,i=>i.Serializer.ContentType.MediaType= "application/json"); 

and in config we use this config:

   cfg.UseRawJsonSerializer();

when use this config, json event is successful published but we have strange problem : "all" event consumer is called by empty message data ! ... in Rabbitmq jsut published our "Dynamic Event", but in masstrasit all consumers called !! Thank you for letting us know if we made a mistake

CodePudding user response:

You don't need all of that JSON manipulation, just send the message object using the endpoint with the serializer configured for RawJson. I cover JSON interoperability in this video.

Also, MassTransit does not allow anonymous types to be published. You might be able to publish dynamic or Expando objects.

CodePudding user response:

I used ExpandoObject like this and get this exception "Messages types must not be in the System namespace: System.Dynamic.ExpandoObject" :

dynamic dynamicObject = new ExpandoObject();
dynamicObject.Id = 1;
dynamicObject.Name = "NameForName";

await endpoint.Send(dynamicObject);

and using like this we get same result as "all consumers called":

 var dynamicObject = new ExpandoObject() as IDictionary<string, object>;
 dynamicObject.Add("Id", 1);
 dynamicObject.Add("Name", "NameForName");

I watch your great video, you used from rabbitmq directly .. how "send the message object using the endpoint with the serializer configured for RawJson" in C# code.

  • Related