2017-11-28 8 views
0

분산 아키텍처를 Python에서 .NetCore로 옮깁니다. 이 아키텍처에는 요청을 서비스 버스 (KAFKA)에 푸시하는 게이트웨이 API가 있습니다. 요청은 Microservices에서 처리합니다. 이 마이크로 서비스는 요청 객체에 설정된 주제에 대해 게이트웨이에 응답 한 다음 클라이언트에 응답합니다. 주제 이름은 python 어플리케이션 (Flask/uwsgi)의 process_id를 기반으로 작성됩니다.메시징 시스템 (kafka/.NET)을 통한 요청 - 응답 전략

하지만 .NetCore Webapi 응용 프로그램을 사용하면 해당 프로세스에서 '주제'를 얻을 수있는 방법을 찾을 수 없습니다 (NetCore에서 시작). 마이크로 서비스 응답을 기다리는 동안 비동기 메소드를 사용하여 엔트리 포인트를 비우는 것은 어셈블리 ID의 종류에 따라 주제 이름을 생성하는 것이 가장 좋습니다. 그러나 모든 Asyc 메서드 호출은 다른 주제를 생성합니다. 맞습니까? 그것은 수많은 주제로 이어질 것입니다 ... 이상한 종류 ...

계속 진행하는 다른 방법이 있습니까?

MemoryCache를 사용하여 Microservices 및 게이트웨이 프로세스의 응답 사이의 통신을 래핑하는 것에 대해 생각하고 있습니다. (요청에는 메모리 캐시 액세스의 키로 사용되는 Guid가 포함됩니다). 어떻게 생각해?

+0

왜 프로세스 ID를 계속 사용하지 않는가? '''''Processs = System.Diagnostics.Process.GetCurrentProcess();''' '''p.Id.ToString();''' – Martin

+0

'작업'과 비동기 기능. NET에서. 파이썬과 프로세스 식별자에 대한 관심은 일단 시작되면 프로세스 ID가 변경되지 않는다는 것이 었습니다. 그런 다음 단일 프로세스가 항상 하나의 주제 만 관리 할 수 ​​있습니다. .NET에서 잠재적 인 호출은 FetchClientResponseAsync()를 기다리는 것이 새로운 프로세스를 생성하여 새로운 주제로 이어질 것이라고 생각합니다. 다중 접근은 많은 화제로 이어질 것인데, 그다지 화제가되지 않는다. (가독성, 단지 1 개의 메시지 만 사용하는 주제 ...) – fredczj

답변

0

이 코드는 동일한 번호를 출력하므로 작업은 주 프로세스의 process_id를 상속합니다. thread_id는 아마도 다릅니다.

process_id 대신 GUID를 사용하는 것도 좋습니다. 그냥 생각.

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); 
     } 
    } 
} 
+0

아, 감사합니다. 그런 다음 하나의 '비동기식'작업에서 응답을 수집하면 내 웹 응용 프로그램이 다른 클라이언트 요청을 수신하고 관리 할 수있게되어 잠재적으로 다시 한 번 연락 서비스로 연결되고 유사한 수신 응답 루프를 입력한다는 것에 동의합니까? 이렇게하면 동일한 주제에 대해 동일한 종류의 응답을 기다리는 두 가지 작업을 수행하여 잠재적 인 손상을 초래할 수 있습니까? – fredczj

+0

또한 'Guid'는 고유 한 값을 생성합니다. 맞습니까? 이것은 각 업무가 개인 응답을 수집하는 데 도움이됩니다. 결과가 엄청난 양의 주제로 이어지더라도 더 좋을 것입니다 ... – fredczj

+0

내 응용 프로그램에 대한 제한된 이해를 기반으로 네, 같은 주제 (process_id)를 기다리는 두 가지 작업을 볼 수 있습니다. GUID는 전 세계적으로 고유합니다. 글로벌 영역은 매우 광범위하지만 애플리케이션 내에서 반드시 고유해야합니다. – Martin