2012-12-13 5 views
1

ServiceStack 재사용 사례 유스 케이스 프로젝트의 솔루션을 사용하고 있습니다.Redis MQ로 첫 번째 가입자가 호출되지 않았습니다.

이 솔루션에 아래 코드가 포함 된 새로운 콘솔 앱이 추가되었습니다. EmailMessage가 (즉 SMessageService.Any (EmailMessage 요청) 이메일을 보내 가입자에 의해 처리 된 게시 된 원래의 재사용 성 사용 사례 프로젝트와

.

나는 콘솔 응용 프로그램을 실행하면 나는 EmailMessage에 가입하는 두 응용 프로그램을 가지고있는 수단 만 새 콘솔 응용 프로그램은 메시지를 수신 나는 다음이

:.

내 콘솔 응용 프로그램은 다음과 같습니다

class Program 
{ 
    static void Main(string[] args) 
    { 
     var subscriberHost = new SubscriberHost(); 
     subscriberHost.Init(); 

     Console.WriteLine("Waiting of publishing 
       to happen on EmailMessage as we are subscribing to it..."); 
     Console.ReadLine(); 
    } 
} 

public class SubscriberHost : AppHostHttpListenerBase 
{ 
    private RedisMqServer mqHost; 

    public SubscriberHost() 
     :base("Subscriber console",typeof(EmailMessageEventHandler).Assembly) 
    { 

    } 


    public override void Configure(Container container) 
    { 
     var redisFactory = new PooledRedisClientManager("localhost:6379"); 
     mqHost = new RedisMqServer(redisFactory, retryCount:2); 

     mqHost.RegisterHandler<EmailMessage>((message) => 
          { 
           var emailMessage = message.GetBody(); 
           Console.WriteLine(emailMessage.To); 
           Console.WriteLine(emailMessage.Subject); 
           Console.WriteLine(emailMessage.Body); 
           return new SMessageReceipt { 
              Type = "not used", 
              To = "test", 
              From = "Reusability", 
              RefId = "1," 
            }; 
                     }); 
    // mqHost.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage); 
    mqHost.Start(); 
    } 
} 

두 구독자 모두 EmailMessage를 수신 할 것으로 예상했지만 새 콘솔 앱에서만 수신 중입니다. 다른 가입자가 메시지를받지 않는 이유는 무엇입니까?

게시를 수행하는 클라이언트 코드가 수정되지 않았습니다.

답변

1

위의 내용은 Redis MQ를 사용하고 있으며 여러 가입자 문제에 대해 Redis Pub/Sub가 필요합니다.

MQ의 경우 구독자가 메시지를 대기열에서 처리하여 처리합니다. 일단 처리되면, 바로 그 것입니다.

Pub/Sub의 경우 많은 구독자가있을 수 있으며 각각은 메시지 사본을받습니다.

다른 사람들에게 도움이되기를 바랍니다.

관련 문제