请求 - 通过消息系统响应策略(kafka / .NET)

时间:2017-11-28 12:47:11

标签: python asp.net-core apache-kafka memorycache

我正在将分布式架构从Python迁移到.NetCore。该架构具有一个网关API,可将请求推送到服务总线(KAFKA)。请求由微服务处理。这些微服务在请求对象中设置的主题上回答网关(然后是客户端)。 主题名称是基于python应用程序(Flask / uwsgi)的process_id构建的。

但是使用.NetCore Webapi应用程序,我无法找到一种方法来获取主题'从它的过程(我开始在.NetCore)。使用Async方法在等待微服务答案时释放入口点,最好是根据程序集ID的类型生成主题名称。但是每个Asyc方法调用都会生成不同的主题,对吧?这将引发大量话题......有点奇怪......

你还有其他方法可以继续吗?

我正在考虑使用MemoryCache来包装来自微服务和网关进程的答案之间的通信。 (该请求将包含一个Guid,用作内存缓存访问的密钥)。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

此代码输出相同的数字,因此任务会继承主进程的process_id。 thread_id可能不同。

您可能还考虑使用GUID,而不是process_id。只是一个想法。

using System;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class s
    {
        public s() { }
        static void Main(string[] args)
        {
        Console.WriteLine(System.Diagnostics.Process.GetCurrentProcess().Id);
        Task.Run(async () => { bool x = await Go(); }).GetAwaiter().GetResult(); ;
        }  

        private static Task<bool> Go()
        {
        Console.WriteLine(System.Diagnostics.Process.GetCurrentProcess().Id);
        return Task.FromResult<bool>(false);
        }
   }
}