WCF에서 NserviceBus로 교체해야합니까


13

다양한 위치의 클라이언트 네트워크에있는 여러 PC에서 메시지를 보내고받는 중앙 서버가 있습니다. 이를 위해 현재 인증서로 보안 된 이중 통신을 사용하여 TCPNetBindings와 함께 WCF를 사용하고 있습니다.

이제이 문제와 관련하여 여러 가지 문제가 있습니다. 주로 "연결 끊김 모드"를 지원하라는 요청을받습니다 (내결함성이 있어야 함). 내가 아는 바로는 WCF 스택을 사용하여이를 수행하는 간단한 방법이 없습니다. 우리는 무언가를 구현하고 아마도 msmq를 사용해야합니다. 나는 최근에 NServiceBus를 살펴 보았으며 청구서에 잘 맞는 것처럼 보입니다. 내결함성, 간단한 http 게이트웨이 등을 통해 인터넷을 통해 메시지를 보낼 수 있습니다. 커뮤니티에서 존경 받는다는 것을 알고 있습니다. 왜 조사를했는지 알 수 있습니다.

그래서 내 질문은 ... NServiceBus를 사용하는 것이 현명한 아이디어처럼 들리거나, 이와 관련된 다른 제안 / 실제 경험이 있습니까? 나는 상대적으로 거의 알지 못하는 새로운 기술을 도입하고, 그것을 확보하고, 신뢰할 수있는 방식으로 모든 것을 설정하고, 길을 따라 가야하는 등의 문제에 직면하는 것에 대해 걱정하고 있습니다. "구현을 도금하고 반짝이는 것을 선택하면 WCF를 고수하고 구현하는 데 도움이 될 것입니다.

감사!


1
> "연결 끊김 모드"지원 (내결함성이 있어야 함) 클라이언트 측에서 많은 내결함성을 계속 구축하지 않아도됩니까? 서버에서 MSMQ의 내결함성은 문제가 발생할 경우 상태를 복원하는 데는 좋지만, 선택한 내용에 관계없이 클라이언트에서 엄청난 고통을 겪고 있습니다.
brian

1
제가 지원해야 할 것은 클라이언트가 서버에 메시지를 보내고 서버가 결국 메시지를 받게된다는 "보증인"입니다. 따라서 우리가 오프라인 상태 인 경우 우리가 도착할 때까지 계속 노력해야합니다. 그것이 NSB가 "무료로"하는 것인데, WCF 솔루션 으로서는 코드가 필요할 것입니다.
Matt Roberts

나는 Brian과 부분적으로 동의합니다. MSMQ는 최신 버전에서 올바르게 구성된 경우 대기열과 메시지가 그렇게 작동하도록 구성하는 한 즉시 연결이 끊긴 모드를 제공합니다. 클라이언트는 로컬 발신 큐에 메시지를 유지하고 원격 큐에서 서버를 다시 사용할 수있을 때 다시 보낼 수 있습니다.
Bill

WCF에는 MSMQ 바인딩이 있습니다. 이것을 사용하는 몇 가지 대규모 성공적인 응용 프로그램에 대해 잘 알고 있습니다. 즉, nServiceBus도 좋아하지만 다른 일을합니다.
Kyle Hodgson

답변:


12

내 제안, 당신이 이것에 대해 빨리해야하고 WCF로 내구성있는 (연결되지 않은) 작업을 용이하게하기 위해 간단한 것이 필요하다면 WCF-MSMQ 바인딩을 살펴 보는 것입니다. 더 큰 환경에서 필요한 것이 있으면 nServiceBus를보십시오.

내 마음에, nServiceBus는 더 큰 분산 환경에서 실제로 빛나기 시작합니다. 예를 들어 다음 예제를 보자 (WCF에서는 지옥이지만 nServiceBus에서는 단순함).

  • 앱 서버 계층, 캐시 서버 계층, 읽기 전용 데이터베이스 계층, 읽기 / 쓰기 데이터베이스 계층으로 구성된 인프라
  • 고객이 새 항목을 제출할 때마다이 모든 계층이 한 번에 업데이트되기를 바랍니다.
  • WCF에서는 각 계층 수준에서 별도의 서비스를 제공하고 클라이언트가 모든 서비스에 푸시하도록해야합니다.
  • nServiceBus에서는 각 계층이이 정보의 가입자가되며 클라이언트는이를 한 번 게시하여 서비스 버스가 나머지를 처리 ​​할 수 ​​있도록합니다.

WCF에는 MSMQ 바인딩이 있습니다.

그러나 대부분 WCF를 고수 해야하는 경우 (짧은 타임 라인, 다른 WCF 기능이 필요) MSDN 에서이 기사 를 확인하는 것이 좋습니다 . MSMQ에 WCF 바인딩을 사용하는 방법과 HTTP에서 MSMQ로 하나의 서비스를 마이그레이션하는 방법을 보여줍니다. 그 과정에서이 시나리오의 일부 문제 (및 이러한 문제에 대한 유용한 솔루션)가 표시됩니다.

이 두 가지 제안 모두 MSMQ를 많이 사용하므로 Apache MQ, RabbitMQ 및 기타 인기있는 큐잉 시스템과 달리 MSMQ는 일반적인 브로커 기반 큐 아키텍처가 아니라 분산 큐입니다. 즉, WCF 클라이언트가 큐를 호스트하는 원격 서버에 연결할 수없는 상태에서 MSMQ 전송을 통해 메시지를 보내면 클라이언트 시스템은 대신 "보내는 큐"라고하는 메시지를 로컬로 큐에 넣습니다. 클라이언트의 MSMQ 서비스가 원격 MSMQ 서비스에 다시 연결할 수 있음을 감지 할 때까지 메시지는 안전하게 유지됩니다. 이 시점에서 메시지는 클라이언트에서 최종 목적지로 흐릅니다.

원격 서버가 너무 오랫동안 오프라인 상태 인 경우 (MSMQ에 대한 설명서 확인) 클라이언트가 메시지를 포기하고 보낸 편지에서 배달 못한 편지 대기열로 옮깁니다. 데드 레터 큐로 전송 된 메시지는 자동으로 다시 보낼 수 없으므로 재구성해야합니다.

암호화가 필요하고 ActiveDirectory가없는 경우,이 블로그 항목 에서 Sergey Sorokin은 Active Directory없이 WCF를 사용하여 MSMQ의 통신을 암호화하는 데 필요한 단계를 자세히 설명합니다.


7

대체품은 1 대 1이 아닙니다. 여러 번 NServiceBus를 사용하여 WCF 엔드 포인트에 메시지를 공급하거나 메시지를받습니다.

어쨌든 이와 같은 연결 해제 모드 시나리오를 처리하는 것은 메시지 큐가 실제로 빛을 발하는 곳입니다. NServiceBus는 시작하기 좋은 곳입니다. 다른 많은 옵션이 있습니다. 많은 사람들이 하루가 끝날 때 실제로 MSMQ를 포장한다는 점에 주목할 것입니다 .MSMQ는 매우 견고한 백엔드이며 액세스가 가능할 때 사용할 가치가 있습니다.


감사. 내 WCF 통신의 대부분 이이 PC와 서버 사이의 통신을 지원하기 때문에 제 경우에는 1 : 1 교체로 보았지만 nsb는이 모든 것을 처리하는 것처럼 보이므로 스왑입니다. -나를 위해.
매트 로버츠

알았어요. 그러면 꽤 잘 작동합니다.
Wyatt Barnett 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.