Penyahtinduan Peristiwa yang serupa setiap Tempoh
Event orientation is great!
Whether you are using GCP Pub/Sub, Kafka, Kinesis, RabbitMQ, NATS JetStream, Redis Pub/Sub or any of the myriad alternatives, the Patterns you learn apply to them all.
Similar Event de-duplication per period
Even if you are enjoying exactly-once-delivery, you will still get similar events that you don't really want to react to multiple times.
A great example of this is actionable alerts. The first time something notices a problem, that's great to escalate to get someone's attention that an action is required. The 700th time is just noise.
If you are sending an event you have fields (whether it is JSON/protobuf/struct whatever), and you just need to identify which fields to group things by to sort them into the same bucket for your time period.
You can take a hash of any arbitrary set of those event fields and calculate a hash of them be the key to some persistence source (key value storage, SQL, whatever) For instance, in Go: https://go.dev/play/p/Ain8FIJiDit
Then store that hash with an expiration timestamp and. If you encounter any more "similar" events before the expiration timestamp, ignore them, as they have already been brought to someone's attention.
Real Life Example
At work, we deal with school districts, and they provide us with their roster, which synchronize with on a regular basis (nightly). But sometimes a human at the school district will make a mistake like accidentally deleting all the students in their roster. Whoops! However, if they haven't fixed the problem, we actually don't need to continue to be reminded more than once.
The district, and the reason we were unable to roster it, are thecomposite unique keys.
Whenever we would file a JIRA ticket (or send an alert to Slack), we first compute the hash of those two keys and see if a matching hash has already been sent, and if so if the last alert has expired (24 hrs or something) before sending a new one and replacing the old one. So for instance, a roster failure for a district could have something a generic as:
v := map[string]any{ "district": "00be2b9c-ef18-4c27-8fa9-087dd5f39f27", "attention": "rosterops", "reason": "roster change exceeds threshold", }
and you wouldn’t hear about that district failing to roster again until the next day. But if someone manually tried to sync up and that district had a different type of failure that occurred (re-running now gives "service unavailable" instead of exceeding the change tolerance threshold:
v := map[string]any{ "district": "00be2b9c-ef18-4c27-8fa9-087dd5f39f27", "attention": "rosterops", "reason": "roster provider is unavailable", }
Again, We can take a hash of any arbitrary set of those fields and make that an indexed datastore field on an alert entity. https://go.dev/play/p/Ain8FIJiDit
Extra bonus
If you also persist another field like "status" you can see if someone is already handling it and make it into a nice action item tracker for any arbitrary alert system.
Atas ialah kandungan terperinci Penyahtinduan Peristiwa yang serupa setiap Tempoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Struct {} adalah struktur tanpa medan di GO, yang menduduki bait sifar dan sering digunakan dalam senario di mana data tidak diperlukan. Ia digunakan sebagai isyarat dalam saluran, seperti penyegerakan goroutine; 2. Digunakan sebagai koleksi jenis nilai peta untuk mencapai pemeriksaan kewujudan utama dalam ingatan yang cekap; 3. Penerima kaedah tanpa stateless yang pasti, sesuai untuk suntikan pergantungan atau fungsi organisasi. Jenis ini digunakan secara meluas untuk mengekspresikan aliran kawalan dan niat yang jelas.

Goprovidessimpleandefficientfilehandlingingtheosandbufiopackages.toreadasmallfileentirely, useos.readfile, whittloadsthecontentintomemorysafelyandautomatikManageSoperations.forlargefilesorincrementalprementalprementalprementrementprementalplocessing,

Anggap yang mengasyik,

Gunakan pakej pengekodan/json perpustakaan standard untuk membaca fail konfigurasi JSON; 2. Gunakan perpustakaan Gopkg.in/yaml.v3 untuk membaca konfigurasi format YAML; 3. Gunakan Perpustakaan OS.Getenv atau Godotenv untuk menimpa konfigurasi fail; 4. Gunakan perpustakaan Viper untuk menyokong fungsi lanjutan seperti konfigurasi pelbagai format, pembolehubah persekitaran, tambah nilai automatik; Adalah perlu untuk menentukan struktur untuk memastikan keselamatan jenis, mengendalikan kesilapan fail dan parsing dengan betul, menggunakan medan pemetaan tag struktur dengan betul, mengelakkan laluan berkod keras, dan mengesyorkan menggunakan pembolehubah persekitaran atau penyimpanan konfigurasi yang selamat dalam persekitaran pengeluaran. Ia boleh bermula dengan JSON yang mudah dan berhijrah ke Viper apabila keperluannya kompleks.

Cgoenablesgotocallccode, membolehkanIntegrationWithClibrariesLikeopenssl, AccessTolow-levelsystemapi, danPerformanceoptimization; iTrequiresimporting "C" withcheadersincomments, usesc.function () syntax, dandemandscareffemoryMangage

Artikel ini bertujuan untuk menyelesaikan kesilapan "undefined" yang ditemui dalam GO ketika cuba menggunakan strconv.itoa64 untuk penukaran integer-to-string. Kami akan menjelaskan mengapa Itoa64 tidak wujud dan memberi butiran mengenai alternatif yang betul kepada strconv.FormatInt dalam pakej STRCONV. Melalui kod contoh, pembaca akan belajar bagaimana untuk menukarkan jenis integer secara efisien dan tepat ke dalam perwakilan rentetan dalam partisi tertentu, elakkan perangkap pengaturcaraan biasa dan meningkatkan kekukuhan kod dan kebolehbacaan.

Pasang alat SQLCCLI, disarankan untuk menggunakan skrip curl atau homebrew; 2. Buat struktur projek, termasuk db/skema.sql (struktur jadual), db/query.sql (pertanyaan anotasi) dan fail konfigurasi sqlc.yaml; 3. Tentukan jadual pangkalan data dalam skema.sql; 4. Tulis pertanyaan SQL dengan -nama: anotasi dan: exec/: one/: banyak arahan dalam query.sqlc.yaml; 5. Konfigurasi SQLC.YAML untuk menentukan laluan pakej, fail pertanyaan, fail skema, enjin pangkalan data dan pilihan generasi; 6. Jalankan SQLCGenerate untuk menjana kod Go Type-Safe, termasuk model, kaedah pertanyaan dan antara muka

Melaksanakan Serialization JSON dan deserialization struktur GO yang disesuaikan untuk Marshaljson dan Unmarshaljson, sesuai untuk mengendalikan format bukan standard atau serasi dengan data lama. 2. Mengawal struktur output melalui Marshaljson, seperti format medan menukar; 3. Parsing data format khas melalui Unmarshaljson, seperti tarikh tersuai; 4. Beri perhatian untuk mengelakkan gelung tak terhingga yang disebabkan oleh panggilan rekursif, dan gunakan alias jenis untuk memintas kaedah tersuai.
