【发布时间】:2019-02-27 16:32:25
【问题描述】:
我是 RabbitMQ、EasyNetQ、TopShelf 组合的新手。 目前,我没有使用任何 DI。
我正在尝试使用 EasyNetQ 订阅队列。 订阅与此控制台应用程序代码一起使用
class Program
{
static void Main(string[] args)
{
using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
bus.Subscribe<Entity>("entity", Handler);
Console.ReadLine();
}
}
private static void Handler(Entity obj)
{
Console.WriteLine($"{obj.ID}, {obj.Name}");
}
}
使用 TopShelf,它不会命中 Handler 方法。我没有看到 TopShelf 或 EasyNetQ 报告的任何错误
class Program
{
static void Main(string[] args)
{
HostFactory.Run(config =>
{
config.Service<TestEasyNet>(service =>
{
service.ConstructUsing(s => new TestEasyNet());
service.WhenStarted(s => s.Start());
service.WhenStopped(s => s.Stop());
});
config.SetServiceName("TestSubscribe");
config.SetDisplayName("Test Subscribe");
config.SetDescription("Test Subscribe");
});
}
}
class TestEasyNet
{
public void Start()
{
using (var bus = EasyNetQ.RabbitHutch.CreateBus("host=localhost"))
{
bus.Subscribe<Entity>("entity", Handler);
}
}
private void Handler(Entity obj)
{
Console.WriteLine("Subscribing");
Console.WriteLine($"{obj.ID}, {obj.Name}");
}
public void Stop()
{ }
}
消息发布代码是
class Program
{
static void Main(string[] args)
{
HostFactory.Run(c =>
{
c.Service<Hosting>(service =>
{
service.ConstructUsing(s => new Hosting());
service.WhenStarted(s => s.Start());
service.WhenStopped(s => s.Stop());
});
c.SetServiceName("TempService");
c.SetDisplayName("Temp Service");
c.SetDescription("Temp Service");
});
}
}
public class Hosting
{
public void Start()
{
var entity = new Entity()
{
ID = 1,
Name = "Entity 1"
};
var entity2 = new Entity()
{
ID = 2,
Name = "Entity 2"
};
var entity3 = new Entity()
{
ID = 3,
Name = "Entity 3"
};
using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
bus.Publish<Entity>(entity);
bus.Publish<Entity>(entity2);
bus.Publish<Entity>(entity3);
}
}
public void Stop()
{
}
}
我不知道我哪里错了!
【问题讨论】:
-
编辑了我的原始答案以链接到通过 TopShelf 管理的服务生命周期
标签: .net rabbitmq topshelf easynetq