Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Cara mengatur penangan di RedMQ dari acara yang diangkat di domain saya

ServiceStack tidak memiliki perbedaan antara layanan yang dibuat untuk layanan MQ, REST, HTML atau SOAP, mereka adalah hal yang sama. yaitu mereka masing-masing menerima DTO Permintaan dan secara opsional mengembalikan DTO Respons dan layanan yang sama dapat menangani panggilan dari titik akhir atau format apa pun, misalnya HTML, REST, SOAP, atau MQ.

Lihat diagram Arsitektur ServiceStack untuk melihat bagaimana MQ cocok.

Batasan

Satu-satunya hal yang perlu Anda ingat adalah:

  • Seperti SOAP, MQ hanya mendukung 1 Verb sehingga metode Anda perlu diberi nama Post atau Apa saja
  • Hanya Filter Tindakan yang dijalankan (yaitu, bukan filter Global atau Atribut)
  • Anda mendapatkan stub MqRequest dan MqResponse sebagai pengganti IHttpRequest , IHttpResponse . Anda masih dapat menggunakan .Items untuk meneruskan data melalui jalur permintaan tetapi tindakan HTTP apa pun seperti menyetel cookie atau Header HTTP tidak berbahaya

Mengonfigurasi Redis MQ Host

Host MQ itu sendiri benar-benar dipisahkan dari kerangka ServiceStack lainnya, yang tidak mengetahui keberadaan MQ sampai Anda mengirimkan pesan ke ServiceStack sendiri, yang biasanya dilakukan di dalam handler terdaftar Anda, mis:

var redisFactory = new PooledRedisClientManager("localhost:6379");
var mqHost = new RedisMqServer(redisFactory, retryCount:2);

mqHost.RegisterHandler<Hello>(m => {
    return this.ServiceController.ExecuteMessage(m);
});

//shorter version:
//mqHost.RegisterHandler<Hello>(ServiceController.ExecuteMessage);


mqHost.Start(); //Starts listening for messages

Di RegisterHandler<T> . Anda Anda menentukan jenis Permintaan yang ingin Anda dengarkan.

Secara default, Anda hanya dapat Mendaftarkan satu penangan untuk setiap pesan dan di ServiceStack, Permintaan terkait dengan implementasi Layanan yang diketahui, dalam kasus MQ, ia mencari tanda tangan metode yang pertama kali cocok:Post(Hello) dan jika itu tidak ada, carilah Any(Hello) fall penggantinya .

Dapat menambahkan sendiri beberapa penangan per pesan

Jika Anda ingin memanggil beberapa penangan maka Anda hanya perlu mempertahankan List<Handler> Anda sendiri dan lakukan saja dan jalankan semuanya saat ada permintaan masuk.

Memanggil layanan yang berbeda

Jika Anda ingin memanggil layanan yang berbeda, cukup terjemahkan ke DTO Permintaan yang berbeda dan teruskan ke ServiceController.

Saat Permintaan MQ dikirim oleh siapa pun, mis:

mqClient.Publish(new Hello { Name = "Client" });

Handler Anda dipanggil dengan instance tipe IMessage di mana Request DTO terdapat di Body Properti. Kemudian Anda dapat memilih untuk membuang pesan, memvalidasinya, atau mengubahnya.

Permintaan MQ sama dengan permintaan Layanan lainnya

Dalam kebanyakan kasus, Anda biasanya hanya meneruskan pesan ke ServiceController untuk diproses, yang implementasinya adalah:

public object ExecuteMessage<T>(IMessage<T> mqMsg)
{
    return Execute(mqMsg.Body, new MqRequestContext(this.Resolver, mqMsg));
}

Implementasi hanya mengekstrak DTO Permintaan dari mqMsg.Body dan memproses pesan tersebut sebagai layanan normal yang diteruskan C# Request DTO sejak saat itu, dengan MqRequestContext yang berisi rintisan MQ IHttpRequest, IHttpResponse.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menggunakan perintah HSCAN di Redis?

  2. StackExchange.Redis dengan Azure Redis sangat lambat atau menimbulkan kesalahan batas waktu

  3. Apa yang harus saya gunakan? Kamar Socket.io atau Redis pub-sub?

  4. menyimpan deret waktu di redis

  5. Rancang tabel database Redis seperti SQL?