RabbitMq EasyNetQ使用Activator.CreateInstance创建消息
本文关键字:创建 消息 CreateInstance Activator EasyNetQ 使用 RabbitMq | 更新日期: 2023-09-27 18:11:18
我有一个问题我不完全明白。当我以这种方式创建消息时,它是工作的:
var message = new StartFakeJobCommand();
using (var publishChannel = ApplicationSingleton.Instance.RabbitBus.OpenPublishChannel())
{
publishChannel.Publish(message);
}
消息被放到队列中,侦听器可以使用它。但是,当我使用Activator创建消息时。像这样创建实例不起作用。没有任何内容被发布到队列。
var t = Type.GetType(string.Format("{0}.{1},{2}", job.CommandNamespace, job.Command, job.AssemblyName));
if (t == null)
throw new ArgumentException();
var message = Activator.CreateInstance(t);
using (var publishChannel = ApplicationSingleton.Instance.RabbitBus.OpenPublishChannel())
{
publishChannel.Publish(message);
}
在调试期间,我可以清楚地看到使用这两种方法创建了相同的类型。知道为什么第二种方法不起作用吗?
这是我订阅消息的方式:
bus.Subscribe<StartFakeJobCommand>("StartFakeJobCommand_ID", message => fakeJob.Handle(message));
Activator的签名。CreateInstance除外:
public static Object CreateInstance(
Type type
)
消息的类型是Object,所以你的消息被发布为Object类型,因为你没有Object的订阅者,所以它是黑洞。
publishChannel打电话。使用正确的泛型发布以解决问题。