ServiceStack.Redis에 대한 이해 구하기 : IRedisClient.PublishMessage 대 IMessageQueueClient.Publish
나는 IRedisClient.PublishMessage
과를 분리하는 데 어려움을 겪고 있으며 IMessageQueueClient.Publish
무언가를 섞어 야한다는 것을 깨달았습니다.
ServiceStack은 다음과 같은 게시 / 구독 브로드 캐스트를 수신 할 수있는 옵션을 제공합니다.
static IRedisSubscription _subscription;
static IRedisClient redisClientSub;
static int received = 0;
static void ReadFromQueue()
{
redisClientSub = redisClientManager.GetClient();
_subscription = redisClientSub.CreateSubscription();
_subscription.OnMessage = (channel, msg) =>
{
try
{
received++;
}
catch (Exception ex)
{
}
};
Task.Run(() => _subscription.SubscribeToChannels("Test"));
}
멋지고 간단 해 보입니다. 하지만 제작자는 어떻습니까?
사용할 수있는 클래스를 볼 때, 나는 한 사용자 중 하나를 수 있다고 생각 IRedisClient.PublishMessage(string toChannel, string message)
하거나 IMessageQueueClient.Publish(string queueName, IMessage message)
.
redisClient.PublishMessage("Test", json);
// or:
myMessageQueueClient.Publish("Test", new Message<CoreEvent>(testReq));
두 경우 모두 채널 이름을 직접 지정합니다. 이것은 내가보고있는 행동입니다.
- 위의 구독자는 내가 사용하는 경우에만 메시지를 수신하고 사용하는 경우에는 수신
IRedisClient.PublishMessage(string toChannel, string message)
하지 않습니다.IMessageQueueClient.Publish(string queueName, IMessage message)
- 를 사용하여 게시하는 경우
IRedisClient.PublishMessage
"Test"채널이 채워질 것으로 예상했지만 (Redis 브라우저로 보는 경우) 그렇지 않습니다. 대기열의 흔적을 볼 수 없습니다 (구독을 시작하지 않지만 생산자가 메시지를 추가한다고 가정 해 보겠습니다). - 을 사용하여 게시하면
IMessageQueueClient.Publish(string queueName, IMessage message)
"Test"채널이 생성되고 메시지가 거기에 유지되지만 팝 / 가져 오기 및 삭제되지 않습니다.
둘의 차이점을 이해하고 싶습니다. 소스 코드를 살펴보고 이에 대해 할 수있는 모든 것을 읽었지만 IRedisClient.PublishMessage
.
답변
Mythz는 ServiceStack 포럼 ( 여기) 에서 이에 대해 답변했습니다 .
그는 다음과 같이 씁니다.
이러한 클라이언트는 서로 바꿔서 사용할 수 없으며 ServiceStack MQ 클라이언트 만 사용하여 MQ 메시지 또는 메시지 MQ 메시지 래퍼를 보내야합니다.
redis 구독은 Redis Pub / Sub 구독을 생성하기위한 저수준 API이며, 더 유용한 상위 수준 API는 관리 스레드 뒤에 게시 / 구독 구독을 래핑하는 Managed Pub / Sub 서버입니다.
어느 쪽이든 MQ 서버는 MQ 클라이언트의 메시지를 처리하도록 설계되었습니다. 자체 메시징 구현을 구현하려는 경우 MQ 클라이언트 또는 MQ 메시지 클래스가 아닌 자체 메시지 및 redis 클라이언트를 사용합니다.
과
Redis 서버용 IRedisClient (& ServiceStack.Redis) API는 없으며 PublishMessage API는 redis PUBLISH 명령을 보냅니다. IRedisSubscription은 Redis Pub / Sub 구독을 생성합니다. Redis Pub / Sub의 작동 방식을 알아 보려면 Redis 문서를 참조하세요. ServiceStack.Redis 라이브러리와 모든 API는 Redis Server 전용이며 ServiceStack.Messaging MQ API를 포함하지 않습니다.
따라서 맞춤 Redis Pub / Sub 구독 구현을 위해 ServiceStack.Redis를 사용하십시오. 즉, ServiceStack MQ 전용 인 ServiceStack.Messaging API를 사용하지 마십시오.