0Pricing
C# Academy · บทเรียน

การผลิตและการใช้ข้อความ

ส่งและจัดการข้อความด้วย MassTransit

การผลิตและการใช้ข้อความ เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

ลงทะเบียน MassTransit

กำหนดค่า MassTransit ใน DI โดยลงทะเบียน MassTransit ชี้ให้ใช้ตัวขนส่ง (ในที่นี้คือ RabbitMQ) และให้ระบบค้นหาผู้บริโภคข้อความของคุณโดยอัตโนมัติ

builder.Services.AddMassTransit(x =>
{
    x.AddConsumers(typeof(Program).Assembly);
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("localhost");
        cfg.ConfigureEndpoints(context);
    });
});

การกำหนดตัวรับข้อความ

ตัวรับข้อความใช้อินเทอร์เฟซ IConsumer<T> สำหรับชนิดข้อความที่ตัวรับจัดการ ตรรกะของคุณอยู่ใน Consume ซึ่งรับ ConsumeContext<T>

public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
    public async Task Consume(ConsumeContext<OrderPlaced> context)
    {
        OrderPlaced message = context.Message;
        // handle the event
    }
}

การเผยแพร่เหตุการณ์

ฉีด IPublishEndpoint แล้วเรียก Publish เพื่อเผยแพร่เหตุการณ์ไปยังสมาชิกทั้งหมด

public class OrderService
{
    private readonly IPublishEndpoint _publish;
    public OrderService(IPublishEndpoint publish) => _publish = publish;

    public Task PlaceOrderAsync(Guid id, string email) =>
        _publish.Publish(new OrderPlaced(id, email));
}

การส่งคำสั่ง

คำสั่งจะส่งไปยังจุดปลายทางเฉพาะ ให้ค้นหา ISendEndpoint สำหรับปลายทางนั้น แล้วเรียก Send

var endpoint = await _sendProvider
    .GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));

สรุปการเผยแพร่เทียบกับการส่ง

การเผยแพร่ใช้สำหรับเหตุการณ์และส่งไปยังตัวรับข้อความที่สมัครรับข้อมูลทุกราย ส่วนการส่งใช้สำหรับคำสั่งและกำหนดเป้าหมายไปยังคิวเดียว การเลือกให้ถูกต้องจะกำหนดลักษณะการกำหนดเส้นทางของคุณ

พลังของบริบทการรับข้อความ

ConsumeContext ให้ข้อมูลมากกว่าข้อความ ได้แก่ รหัสการเชื่อมโยง ส่วนหัว และความสามารถในการเผยแพร่หรือตอบกลับจากภายในตัวรับข้อความ ซึ่งช่วยให้สามารถเชื่อมโยงข้อความได้

public async Task Consume(ConsumeContext<OrderPlaced> context)
{
    await context.Publish(new InvoiceRequested(context.Message.OrderId));
}

คำขอและการตอบกลับ

MassTransit ยังรองรับคำขอและการตอบกลับผ่านระบบส่งข้อความด้วย ไคลเอนต์คำขอจะส่งคำขอและรอการตอบกลับที่มีชนิดข้อมูลกำกับ เหมาะเมื่อคุณต้องการคำตอบแต่ยังต้องการแยกส่วนออกจากกันด้วยตัวกลางข้อความ

var response = await _client
    .GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;

การตั้งชื่อจุดปลายทาง

ConfigureEndpoints จะตั้งชื่อจุดปลายทางรับข้อความ (คิว) ให้ผู้รับข้อความแต่ละรายโดยอัตโนมัติตามแบบแผน คุณสามารถปรับแต่งชื่อด้วยตัวจัดรูปแบบหรือการกำหนดค่าอย่างชัดเจนเมื่อจำเป็น

การทำให้ข้อความเป็นอนุกรม

โดยค่าเริ่มต้น MassTransit จะทำให้ข้อความเป็นอนุกรมในรูปแบบเจสันและใส่ข้อมูลเมตา เช่น ชนิดข้อความและรหัสต่าง ๆ ผู้ผลิตและตัวรับข้อความใช้ชนิดสัญญาข้อความร่วมกัน ซึ่งมักอยู่ในแพ็กเกจที่ใช้ร่วมกัน

การทำงานพร้อมกัน

ตัวรับข้อความสามารถประมวลผลหลายข้อความพร้อมกันได้ ปรับ PrefetchCount และขีดจำกัดการทำงานพร้อมกันเพื่อรักษาสมดุลระหว่างปริมาณงานกับความสามารถในการรองรับของระบบปลายทาง

cfg.ReceiveEndpoint("orders", e =>
{
    e.PrefetchCount = 16;
    e.ConcurrentMessageLimit = 8;
    e.ConfigureConsumer<OrderPlacedConsumer>(context);
});

การทดสอบตัวรับข้อความ

MassTransit มาพร้อมตัวจำลองการทดสอบในหน่วยความจำ คุณจึงสามารถเผยแพร่ข้อความและตรวจสอบว่าตัวรับข้อความจัดการข้อความนั้นแล้ว โดยไม่ต้องใช้ตัวกลางข้อความจริง

ตรวจสอบอย่างรวดเร็ว

ทดสอบการสร้างและการรับข้อความ

สรุป

ลงทะเบียน MassTransit ด้วย AddMassTransit ทรานสปอร์ต และ ConfigureEndpoints ตัวรับข้อความใช้อินเทอร์เฟซ IConsumer<T> พร้อมเมธอด Consume ใช้ IPublishEndpoint.Publish สำหรับเหตุการณ์ (สมาชิกทั้งหมด) และ ISendEndpoint.Send สำหรับคำสั่ง (คิวเดียว) ConsumeContext ช่วยให้เชื่อมโยงข้อความและรองรับคำขอและการตอบกลับได้ ส่วนตัวจำลองการทดสอบจะตรวจสอบตัวรับข้อความในหน่วยความจำ

คำถามที่พบบ่อย

บทเรียน “การผลิตและการใช้ข้อความ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การผลิตและการใช้ข้อความ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การผลิตและการใช้ข้อความ”

ส่งและจัดการข้อความด้วย MassTransit คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การผลิตและการใช้ข้อความ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. แนวคิดการส่งข้อความ
  2. การผลิตและการใช้ข้อความ
  3. ซากาและเวิร์กโฟลว์
  4. การจัดการข้อผิดพลาดและการลองใหม่
← กลับไปที่ C# Academy