Kami memiliki server pusat yang mengirim dan menerima pesan dari sejumlah PC yang berlokasi di jaringan klien di berbagai lokasi. Untuk memfasilitasi ini, saat ini saya menggunakan WCF dengan TCPNetBindings, menggunakan komunikasi dupleks yang diamankan dengan sertifikat.
Sekarang, kami memiliki sejumlah masalah dengan ini - terutama bahwa kami diminta untuk mendukung "mode terputus" (kami harus toleran terhadap kesalahan). Dari apa yang saya tahu, tidak ada cara sederhana untuk melakukan ini menggunakan tumpukan WCF - kita perlu mengimplementasikan sesuatu dan mungkin menggunakan msmq. Saya telah melihat NServiceBus akhir-akhir ini, dan dari saya bisa melihatnya cocok dengan toleransi - kesalahan, pesan dapat dikirim melalui internet melalui http gateway sederhana, dll. Saya tahu itu dihormati di masyarakat, dan Saya bisa melihat mengapa dari melihat ke dalamnya.
Jadi, pertanyaan saya adalah ... Apakah mempekerjakan NServiceBus terdengar seperti ide yang masuk akal, atau apakah ada yang punya saran lain / pengalaman dunia nyata yang berhubungan dengan ini? Saya kira saya khawatir memperkenalkan teknologi baru yang saya tahu sedikit tentang, dan menghadapi masalah dengan hal-hal seperti mengamankan itu, mengatur semuanya dengan cara yang dapat diandalkan, membuat Gotcha sepanjang jalan .. Saya juga waspada terhadap "emas- melapisi "arsitekturnya, dan memilih sesuatu yang mengkilap yang pada akhirnya akan menghambat saya dalam implementasi dibandingkan bertahan dengan WCF dan hanya membuatnya bekerja untuk saya ..
Terima kasih!
sumber
Jawaban:
Saran saya, jika Anda perlu cepat tentang ini dan hanya perlu sesuatu yang sederhana untuk memfasilitasi operasi tahan lama (terputus) dengan WCF, adalah untuk melihat ke dalam binding WCF - MSMQ. Jika Anda membutuhkan sesuatu di lingkungan yang lebih besar, lihat nServiceBus.
Dalam pikiran saya, nServiceBus akan benar-benar mulai bersinar di lingkungan terdistribusi yang lebih besar. Ambil, misalnya, contoh berikut (itu akan sangat sulit dengan WCF tetapi sederhana dengan nServiceBus):
WCF memiliki Binding MSMQ
Jika Anda harus tetap menggunakan WCF, namun (jadwal pendek, perlu fitur WCF lainnya), saya sarankan Anda membaca artikel ini di MSDN. Ini menunjukkan kepada Anda bagaimana menggunakan binding WCF untuk MSMQ, dan kemudian menunjukkan kepada Anda bagaimana memigrasi satu layanan dari HTTP ke MSMQ. Sepanjang jalan itu menunjukkan kepada Anda beberapa masalah dengan skenario ini (dan solusi yang berguna untuk masalah ini).
Kedua saran ini banyak menggunakan MSMQ, jadi catatan tentang hal itu: tidak seperti Apache MQ, RabbitMQ, dan sistem antrian populer lainnya, MSMQ bukan arsitektur antrian berbasis broker yang khas, melainkan antrian terdistribusi. Ini berarti bahwa jika klien WCF Anda mengirim pesan melalui transport MSMQ sementara itu tidak dapat terhubung ke server jarak jauh yang menjadi tuan rumah antrian, mesin klien akan mengirim pesan dalam apa yang disebut sebagai "Antrian Keluar" secara lokal sebagai gantinya. Pesan akan tetap di sana dengan aman sampai layanan MSMQ klien mendeteksi bahwa ia dapat terhubung ke layanan MSMQ jarak jauh lagi. Pada titik itu pesan akan mengalir dari klien ke tujuan akhir.
Setidaknya ada satu peringatan di atas - jika server jauh offline terlalu lama (periksa dokumentasi Anda untuk MSMQ) klien akan menyerah dan memindahkan pesan dari keluar ke antrian surat mati. Pesan yang ditransfer ke antrian surat mati tidak dapat dikirim ulang secara otomatis, mereka harus dibangun kembali.
Jika Anda memerlukan enkripsi dan tidak memiliki ActiveDirectory, pada entri blog ini , Sergey Sorokin merinci langkah-langkah yang diperlukan untuk mengenkripsi komunikasi MSMQ menggunakan WCF tanpa Active Directory.
sumber
Mereka bukan pengganti 1 untuk 1 - sering kali Anda akan menggunakan NServiceBus untuk memberi makan pesan atau mengambil pesan dari titik akhir WCF.
Bagaimanapun, menangani skenario mode terputus seperti ini adalah di mana antrian pesan benar-benar bersinar. NServiceBus adalah tempat yang baik untuk memulai. Ada sejumlah opsi lain di luar sana. Saya akan perhatikan banyak dari mereka yang benar-benar membungkus MSMQ pada akhir hari - MSMQ adalah ujung belakang yang sangat solid dan mungkin layak digunakan ketika itu dapat diakses.
sumber