การค้นหาความเข้าใจเกี่ยวกับ ServiceStack.Redis: IRedisClient.PublishMessage กับ IMessageQueueClient.Publish
ฉันมีช่วงเวลาที่ยากลำบากในการแยกIRedisClient.PublishMessage
และIMessageQueueClient.Publish
และตระหนักว่าฉันต้องผสมอะไรบางอย่างเข้าด้วยกัน
ServiceStack ช่วยให้เรามีตัวเลือกในการฟังการออกอากาศ pub / sub ดังนี้:
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
ฉันคาดว่าจะมีการเติมช่อง "ทดสอบ" (หากฉันดูด้วยเบราว์เซอร์ Redis) แต่ไม่ใช่ ฉันไม่เห็นร่องรอยของคิวเลย (สมมติว่าฉันไม่ได้เริ่มการสมัครสมาชิก แต่ผู้ผลิตเพิ่มข้อความ) - หากฉันเผยแพร่โดยใช้
IMessageQueueClient.Publish(string queueName, IMessage message)
ช่อง "ทดสอบ" จะถูกสร้างขึ้นและข้อความจะยังคงอยู่ที่นั่น แต่จะไม่ปรากฏ / ดึงข้อมูลและลบ
ฉันต้องการเข้าใจความแตกต่างระหว่างทั้งสอง ฉันได้ดูรหัสที่มาและอ่านทั้งหมดที่ฉันสามารถเกี่ยวกับมัน แต่ฉันยังไม่พบเอกสารใด ๆ IRedisClient.PublishMessage
เกี่ยวกับ
คำตอบ
Mythz ตอบนี้ในฟอรั่ม ServiceStack, ที่นี่
เขาเขียน:
ไม่ควรใช้ไคลเอ็นต์เหล่านี้สลับกันคุณควรใช้เฉพาะไคลเอนต์ ServiceStack MQ เพื่อส่งข้อความ MQ หรือข้อความ MQ ของข้อความ
การสมัครสมาชิก redis เป็น API ระดับต่ำเพื่อสร้างการสมัครสมาชิก Redis Pub / Sub API ระดับที่สูงขึ้นที่มีประโยชน์มากขึ้นคือ Managed Pub / Sub Server ซึ่งรวมการสมัครสมาชิก pub / sub ไว้ด้านหลังเธรดที่มีการจัดการ
ไม่ว่าจะด้วยวิธีใด MQ Server ได้รับการออกแบบมาเพื่อประมวลผลข้อความจากไคลเอนต์ MQ เท่านั้นหากคุณกำลังจะใช้งานการส่งข้อความของคุณเองให้ใช้ข้อความของคุณเองและไคลเอนต์ redis ไม่ใช่ไคลเอนต์ MQ หรือคลาส MQ Message
และ
ไม่มี IRedisClient (& ServiceStack.Redis) API สำหรับ Redis Server, PublishMessage API จะส่งคำสั่ง redis PUBLISH IRedisSubscription สร้างการสมัครสมาชิก Redis Pub / Sub โปรดดูเอกสาร Redis เพื่อเรียนรู้ว่า Redis Pub / Sub ทำงานอย่างไร ไลบรารี ServiceStack.Redis และ API ทั้งหมดมีไว้สำหรับเซิร์ฟเวอร์ Redis เท่านั้นไม่มี ServiceStack ใด ๆ การส่งข้อความ MQ API
ดังนั้นเพียงใช้ ServiceStack.Redis สำหรับการสมัครสมาชิก Redis Pub / Sub แบบกำหนดเองของคุณนั่นคืออย่าใช้ ServiceStack.Messaging API ใด ๆ ซึ่งมีไว้สำหรับ ServiceStack MQ เท่านั้น