Filter dan tindakan topik

Pelanggan dapat menentukan pesan mana yang ingin mereka terima dari sebuah topik. Pesan-pesan ini ditentukan dalam bentuk satu aturan langganan bernama atau lebih. Setiap aturan terdiri dari kondisi filter yang memilih pesan tertentu, dan secara opsional berisi sebuah tindakan yang menganotasi pesan yang dipilih.

Semua aturan tanpa tindakan digabungkan menggunakan kondisi OR dan menghasilkan satu pesan pada langganan meskipun Anda memiliki beberapa aturan yang cocok.

Setiap aturan dengan tindakan menghasilkan salinan pesan. Pesan ini akan memiliki properti yang disebut RuleName yang nilainya adalah nama aturan yang cocok. Tindakan dapat menambahkan atau memperbarui properti, atau menghapus properti dari pesan asli untuk menghasilkan pesan pada langganan.

Pertimbangkan skenario berikut di mana langganan memiliki lima aturan: dua aturan dengan tindakan dan tiga lainnya tanpa tindakan. Dalam contoh ini, jika Anda mengirim satu pesan yang cocok dengan kelima aturan tersebut, Anda mendapatkan tiga pesan pada langganan. Itu dua pesan untuk dua aturan dengan tindakan dan satu pesan untuk tiga aturan tanpa tindakan.

Setiap langganan topik yang baru dibuat memiliki aturan langganan default awal. Jika Anda tidak secara eksplisit menentukan kondisi filter untuk aturan tersebut, filter yang diterapkan adalah filter true yang memungkinkan semua pesan dipilih ke dalam langganan. Aturan default tidak memiliki tindakan anotasi terkait.

Catatan

Artikel ini berlaku untuk skenario non-JMS. Untuk skenario JMS, gunakan pemilih pesan.

Filter

Bus Layanan mendukung tiga jenis filter:

  • Filter SQL
  • Filter Boolean
  • Filter korelasi

Bagian berikut ini menyediakan detail tentang filter ini.

Filter SQL

SqlFilter menyimpan ekspresi bersyarat seperti SQL yang akan dievaluasi di broker terhadap properti dan properti sistem yang ditentukan pengguna pesan yang tiba. Semua properti sistem harus diawali sys. dalam ekspresi bersyarat. Subset bahasa SQL untuk pengujian kondisi filter untuk keberadaan properti (EXISTS), nilai null (IS NULL), operator logisAND//NOTOR, relasional, aritmatika numerik sederhana, dan pola teks sederhana yang cocok dengan .LIKE

Berikut adalah contoh .NET untuk menentukan filter SQL:

adminClient = new ServiceBusAdministrationClient(connectionString);    

// Create a SQL filter with color set to blue and quantity to 10
await adminClient.CreateSubscriptionAsync(
		new CreateSubscriptionOptions(topicName, "ColorBlueSize10Orders"), 
		new CreateRuleOptions("BlueSize10Orders", new SqlRuleFilter("color='blue' AND quantity=10")));

// Create a SQL filter with color set to red
// Action is defined to set the quantity to half if the color is red
await adminClient.CreateRuleAsync(topicName, "ColorRed", new CreateRuleOptions 
{ 
	Name = "RedOrdersWithAction",
	Filter = new SqlRuleFilter("user.color='red'"),
	Action = new SqlRuleAction("SET quantity = quantity / 2;")
}

Filter Boolean

TrueFilter dan FalseFilter menyebabkan semua pesan yang tiba (benar) atau tidak ada pesan yang tiba (salah) yang dipilih untuk langganan. Kedua filter ini berasal dari filter SQL.

Berikut adalah contoh .NET untuk menentukan filter boolean:

// Create a True Rule filter with an expression that always evaluates to true
// It's equivalent to using SQL rule filter with 1=1 as the expression
await adminClient.CreateSubscriptionAsync(
		new CreateSubscriptionOptions(topicName, subscriptionAllOrders), 
		new CreateRuleOptions("AllOrders", new TrueRuleFilter()));	

Filter korelasi

CorrelationFilter menyimpan serangkaian kondisi yang cocok dengan satu atau beberapa properti pengguna dan sistem pesan yang tiba. Penggunaan umum adalah mencocokkan dengan properti CorrelationId, tetapi aplikasi juga dapat memilih untuk mencocokkan dengan properti berikut:

  • ContentType
  • Label
  • MessageId
  • ReplyTo
  • ReplyToSessionId
  • SessionId
  • To
  • properti yang ditentukan pengguna.

Kecocokan ada ketika nilai pesan yang tiba untuk properti sama dengan nilai yang ditentukan dalam filter korelasi. Untuk ekspresi string, perbandingannya peka huruf besar/kecil. Jika Anda menentukan beberapa properti kecocokan, filter menggabungkannya sebagai kondisi DAN logis, yang berarti filter cocok, semua kondisi harus cocok.

Berikut adalah contoh .NET untuk menentukan filter korelasi:

// Create a correlation filter with color set to Red and priority set to High
await adminClient.CreateSubscriptionAsync(
		new CreateSubscriptionOptions(topicName, "HighPriorityRedOrders"), 
		new CreateRuleOptions("HighPriorityRedOrdersRule", new CorrelationRuleFilter() {Subject = "red", CorrelationId = "high"} ));	

CorrelationRuleFilter Gunakan konstruktor yang mengambil String argumen untuk membuat filter korelasi dengan ID korelasi.

Saat Anda menggunakan CorrelationRuleFilter konstruktor default, Anda dapat menetapkan properti sistem (ContentType, , , Label, ReplyToMessageId, ReplyToSessionId, SessionId, To), dan properti yang ditentukan pengguna untuk pemfilteran. Untuk menentukan properti yang ditentukan pengguna untuk filter korelasi, gunakan properti Properties jenis IDictionary <string, object>. Kunci untuk kamus ini adalah properti yang ditentukan pengguna untuk mencari pesan. Nilai yang terkait dengan kunci adalah nilai untuk berkorelasi. Berikut adalah contohnya.

var filter = new CorrelationFilter();
filter.Label = "abc";
filter.ReplyTo = "xdeu@hotmail.com";
filter.Properties["prop1"] = "abc";
filter.Properties["prop2"] = "xyz";

Catatan

  • Semua filter mengevaluasi properti pesan. Filter tidak dapat mengevaluasi isi pesan.
  • Aturan filter kompleks memerlukan kapasitas pemrosesan. Secara khusus, penggunaan aturan filter SQL menyebabkan throughput pesan keseluruhan yang lebih rendah pada tingkat langganan, topik, dan namespace. Jika memungkinkan, aplikasi harus memilih filter korelasi melalui filter melalui filter seperti SQL karena jauh lebih efisien dalam pemrosesan dan memiliki dampak yang lebih kecil pada throughput.

Tindakan

Dengan ketentuan filter SQL, Anda dapat menentukan tindakan yang dapat membuat anotasi pesan dengan menambahkan, menghapus, atau mengganti properti dan nilainya. Tindakan ini menggunakan ekspresi seperti SQL yang secara longgar condong pada SQL UPDATE sintaks pernyataan. Tindakan dilakukan pada pesan setelah dicocokkan dan sebelum pesan dipilih ke dalam langganan. Perubahan pada properti pesan bersifat pribadi untuk pesan yang disalin ke dalam langganan.

Berikut adalah contoh .NET yang membuat aturan SQL dengan tindakan untuk memperbarui kuantitas saat warnanya Merah.

adminClient = new ServiceBusAdministrationClient(connectionString);    

// Create a SQL filter with color set to red
// Action is defined to set the quantity to half if the color is red
await adminClient.CreateRuleAsync(topicName, "ColorRed", new CreateRuleOptions 
{ 
	Name = "RedOrdersWithAction",
	Filter = new SqlRuleFilter("user.color='red'"),
	Action = new SqlRuleAction("SET quantity = quantity / 2;")
}

Pola penggunaan

  • Pola siaran

    Skenario penggunaan paling sederhana untuk sebuah topik adalah bahwa setiap langganan mendapatkan salinan setiap pesan yang dikirim ke sebuah topik, yang memungkinkan pola siaran.

  • Pola pemartisian

    Pemartisian menggunakan filter untuk mendistribusikan pesan di beberapa langganan topik yang ada dengan cara yang dapat diprediksi dan saling eksklusif . Pola partisi digunakan ketika sistem diskalakan untuk menangani banyak konteks yang berbeda di kompartemen yang identik secara fungsional yang masing-masing mengikat subset data keseluruhan; misalnya, informasi profil pelanggan. Dengan partisi, penerbit mengirimkan pesan ke dalam topik tanpa memerlukan pengetahuan tentang model partisi. Pesan kemudian dipindahkan ke langganan yang benar yang dari situ pesan tersebut kemudian dapat diambil oleh handler pesan partisi.

  • Pola perutean

    Perutean menggunakan filter untuk mendistribusikan pesan di seluruh langganan topik dengan cara yang dapat diprediksi, tetapi belum tentu eksklusif. Bersamaan dengan fitur penerusan otomatis, filter topik dapat digunakan untuk membuat grafik perutean yang kompleks dalam namespace Service Bus untuk distribusi pesan dalam wilayah Azure. Dengan Azure Functions atau Azure Logic Apps yang bertindak sebagai jembatan antara namespace Azure Service Bus, Anda dapat membuat topologi global yang kompleks dengan integrasi langsung ke dalam aplikasi lini bisnis.

Catatan

Karena portal Microsoft Azure sekarang mendukung fungsionalitas Service Bus Explorer, filter langganan dapat dibuat atau diedit dari portal.

Langkah berikutnya

Untuk contoh selengkapnya, lihat contoh filter Bus Layanan.