Dua pola integrasi perusahaan adalah pesan perintah dan pesan acara . Saya sedang mengerjakan suatu sistem di mana kami menggunakan pesan tidak hanya untuk integrasi dengan sistem lain, tetapi untuk komunikasi internal antar layanan. Ini seharusnya menjadi sistem yang akhirnya konsisten , dan layanan seharusnya saling mengabaikan (dengan pengecualian untuk beberapa layanan tujuan khusus). Karena itu, kami mencoba menghindari hal-hal yang terasa seperti panggilan prosedur jarak jauh (RPC atau RPI). Kami memiliki sistem middleware bus dan berorientasi pesan, dan semua pesan disiarkan.
Kita cenderung menyebut pesan kita sebagai peristiwa, yaitu, sebagai frase di masa lalu yang sempurna, misalnya PurchaseOrderShipped
. Namun, acara sering ditambahkan hanya ketika beberapa layanan lain perlu tahu tentang mereka, dan pada awalnya, seringkali hanya satu layanan yang peduli. Selain itu, kadang-kadang layanan itu memancarkan suatu peristiwa, yang didengarkan oleh layanan pertama. Jadi jika saya membuat diagram interaksi, itu akan terlihat lebih seperti diagram untuk pesan perintah di tautan di atas (atau bahkan diagram RPC) daripada yang untuk pesan acara, meskipun sekali lagi, ini tidak benar-benar diterapkan dengan pesan langsung tetapi disiarkan di bus. Tambahkan ke fakta bahwa saya baru saja melihat beberapa pesan yang ditambahkan yang dinamai perintah, yaitu, frase dalam imperatif, misalnya BillShippedPurchaseOrder
.
Yang aneh adalah bahwa nama-nama pesan dan cara mereka mengalir tidak berubah oleh apakah itu disebut sebagai suatu peristiwa atau sebagai perintah. Jadi bagaimana seseorang menentukan apakah sesuatu harus berupa pesan perintah atau peristiwa? Apakah ini hanya perbedaan semantik dan penamaan, atau adakah perbedaan implementasi yang sebenarnya antara pesan perintah dan acara? Mengingat bahwa semua pesan kami disiarkan, apakah itu berarti daripada tidak satupun dari mereka yang benar-benar pesan perintah?
request for information
fungsionalitas? Tampaknya wajar untuk menggunakan sesuatu sepertigetUserInfo(uid)
yang merupakan pesan perintah tanpa respons. Saya tahu bahwa pesan perintah memperkenalkan kopling, tetapi sayangnya dalam kasus ini, saya tidak melihat bagaimana menerapkannya dengan pesan acara. Atau tidak apa-apa untuk tetap berpegang pada perintah pesan pada beberapa kesempatan seperti ini?CancelPolicyRequest
pesan yang merupakan perintah. Pendekatan lain menggunakan dua pesan acara, yaituInvoicePastDueNotification
danPolicyCancelledNotification
. Jadi saya bertanya-tanya apakah mungkin untuk mengejar perintah sukagetUserInfo(uid)
gaya pesan acara dan bagaimana saya harus melakukan itu.Action
terkait dengan perintah. Ada dua langkah yang terkait dengan perintah. 1) Apakah perintah diperlukan (mis. Kebijakan kedaluwarsa), dan 2) jalankan perintah (mis. Batalkan kebijakan). JikaActor
yang menentukan apakah perintah diperlukan DAN dapat dijalankan, maka ituActor
dapat mengirim pesan acara. Kalau tidak, apa pun yang menentukan bahwa perintah diperlukan diperlukan untuk mengirim acara perintah.Pesan acara adalah sesuatu yang baru saja terjadi. Anda memberi tahu acara yang baru saja terjadi.
Pesan Perintah adalah pesan yang mengharapkan sesuatu untuk dilakukan. Mungkin atau mungkin tidak mengharapkan tanggapan.
Kapan harus menggunakan apa yang datang ke kopling dan perbedaannya hanya akan muncul seiring waktu ketika sistem berevolusi. Acara yang disukai daripada perintah menghasilkan lebih sedikit sambungan. Emitor dari acara tersebut tidak peduli dengan konsumen. Dalam pola perintah pemanggil tahu dan karenanya tergantung pada keberadaan penyedia.
Bill Poole menyarankan menghindari pesan perintah secara bersamaan: http://bill-poole.blogspot.com.au/2008/04/avoid-command-messages.html
http://bill-poole.blogspot.com.au/
sumber