因此,当我在本地运行我的两个服务时,我可以点击服务A,它向服务B发送一个命令,然后选择并处理它。挺直的。但是,当我将这些发布到我的Web服务器并向服务A发送请求时,它将服务发送给服务B(我可以在服务B的队列中看到该消息),但它不会被接收和处理。我在服务B上创建了一个端点,它只返回一个OK响应 - 如果我调用此端点,有效地“触摸”该服务,一切就会启动,消息就会从那一点开始处理。
我认为这可能与后期编译有关,所以我在发布时将发布更改为预编译,但我得到了相同的结果。
有没有办法让服务一发布就开始处理?另外值得注意的是,这两项服务都是WebAPI 2
答案 0 :(得分:2)
另一个选项(可能更“标准”)是将“处理程序”移动到Windows服务而不是Web应用程序。
对于此Windows服务,您可以利用NServiceBus主机,它将为您提供标准类库到Windows服务。他们在此处提供了大量有关此内容的文档:https://docs.particular.net/nservicebus/hosting/nservicebus-host/?version=Host_6
我认为这更稳定,因为您可以分离发送命令(Web应用程序/ WebApi)和处理命令/发布事件(NSB主机)的处理。主机可以自己坐在Web服务器上,也可以将它们放在不同的服务器上。
我们的默认架构是在您以不同方式扩展Web应用程序和NSB主机时,让单独的服务器运行我们的NSB主机。如果在Web服务器上运行NSB主机,则可能会出现Web应用程序获取过多流量并使NSB主机处理失败的问题。您可以随时使用1台服务器开始简单,监控服务器,然后随着流量的增加移动。
答案 1 :(得分:1)
不确定这是否是做事的“正确方法”,但我最终做的是设置每个网站始终运行并自动初始化。
preload enabled = true
doAppInitAfterRestart="true"
通过设置这些内容,部署过程基本上是发布站点和iisreset。如果有更好的选择,我仍然在寻找:)