【发布时间】:2018-05-11 22:26:58
【问题描述】:
我正在将分布式架构从 Python 迁移到 .NetCore。此架构具有将请求推送到服务总线 (KAFKA) 的网关 API。请求由微服务处理。这些微服务在请求对象中设置的主题上回答网关(然后是客户端)。 主题名是根据python应用程序的process_id构建的(Flask/uwsgi)。
但是对于 .NetCore Webapi 应用程序,我找不到从其进程中获取“主题”的方法(我从 .NetCore 开始)。使用 Async 方法在等待微服务应答时释放入口点,最好是根据 Assembly ID 的种类生成主题名称。但是每个 Asyc 方法调用都会产生不同的主题,对吧?这会引发大量话题……有点奇怪……
您还有其他方法可以继续吗?
我正在考虑使用 MemoryCache 来包装来自微服务和网关进程的答案之间的通信。 (请求将包含一个 Guid,用作内存缓存访问的键)。你怎么看?
【问题讨论】:
-
为什么不继续使用进程ID呢?
Process p = System.Diagnostics.Process.GetCurrentProcess();p.Id.ToString(); -
我不知道 .NET 中的“任务”和异步函数是如何处理的。对 python 和进程标识符的兴趣是(在我看来),一旦启动,进程 ID 就永远不会改变。那么单个进程总是只能管理一个Topic。在 .NET 中,我猜想调用潜在的
await FetchClientResponseAsync()会生成一个新进程,从而引出一个新主题。多重访问会导致很多很多的主题,我觉得不太舒服(可读性,主题只用于很少的 1 条消息......)
标签: python asp.net-core apache-kafka memorycache