ドキュメントの説明に従って Azure portal から既定の管理資格情報を取得した後、アプリケーションは次のように Service Bus 名前空間の ServiceBusContract オブジェクトを取得できました。
public class Service
{
private Configuration config;
public Service()
{
String namespace = "jasper";
String issuer = "owner";
String key = "BB9BB9BBBbBBBbBbbBBbB99SS9b+Bb9BbB+bbBBbBB9=";
String serviceBusRootUri = ".servicebus.windows.net";
String wrapRootUri = "-sb.accesscontrol.windows.net/WRAPv0.9";
this.config = ServiceBusConfiguration.configureWithWrapAuthentication(
namespace,
issuer,
key,
serviceBusRootUri,
wrapRootUri);
}
public ServiceBusContract getservice()
{
ServiceBusContract service = ServiceBusService.create(config);
return service;
}
}
次に、次の Java コードを使用して、「TestTopic」トピックへの 3 つのサブスクリプションを作成できます。「TestTopic」は「jasper」ネームスペースにすでに存在している必要があります。「AllMessages」サブスクリプションはデフォルトで、トピックに送信されたすべてのメッセージを受信します。「LowMessages」および「HighMessages」サブスクリプションは、SqlFilter ルールを使用して、MessageNumber カスタム プロパティの値に基づいてメッセージをフィルタリングします。元のサンプル コードでは、ルール名を指定する必要があることと、デフォルト ルールを削除する必要があることが省略されています。デフォルト ルールを削除しない場合、サブスクリプションは引き続きすべてのメッセージを受信します。
public class Make_sub_rule
{
public static void main(String[] args) throws ServiceException {
Service creds = new Service();
ServiceBusContract service = creds.getservice();
SubscriptionInfo subInfo = new SubscriptionInfo("AllMessages");
service.createSubscription("TestTopic", subInfo);
System.out.println(subInfo.getName() + " Default Rules");
SubscriptionInfo subInfo1 = new SubscriptionInfo("LowMessages");
CreateSubscriptionResult result1 = service.createSubscription("TestTopic", subInfo1);
RuleInfo ruleInfo1 = new RuleInfo("RULENAME1");
ruleInfo1 = ruleInfo1.withSqlExpressionFilter("MessageNumber <= 3");
CreateRuleResult ruleResult1 =
service.createRule("TestTopic", "LowMessages", ruleInfo1);
service.deleteRule("TestTopic", "LowMessages", "$Default");
System.out.println(subInfo1.getName() + " " + result1.toString());
System.out.println(ruleInfo1.getName() + " " + ruleResult1.toString());
SubscriptionInfo subInfo2 = new SubscriptionInfo("HighMessages");
CreateSubscriptionResult result2 = service.createSubscription("TestTopic", subInfo2);
RuleInfo ruleInfo2 = new RuleInfo("RULENAME2");
ruleInfo2 = ruleInfo2.withSqlExpressionFilter("MessageNumber > 3");
CreateRuleResult ruleResult2 =
service.createRule("TestTopic", "HighMessages", ruleInfo2);
service.deleteRule("TestTopic", "HighMessages", "$Default");
System.out.println(subInfo2.getName() + " " + result2.toString());
System.out.println(ruleInfo2.getName() + " " + ruleResult2.toString());
}
}
以下は、仲介メッセージのバッチを「TestTopic」に送信し、MessageNumber カスタム プロパティの値を増やします。
public class SendSbMsTopicB
{
public static void main(String[] args) throws ServiceException {
Service creds = new Service();
ServiceBusContract service = creds.getservice();
for (int i=0; i<7; i++)
{
BrokeredMessage message = new BrokeredMessage("Test message" + i);
message.setLabel("Day" + i);
message.setProperty("MessageNumber", i);
message.setProperty("CustomProperty", "CustomTestValue" + i);
service.sendTopicMessage("TestTopic", message);
System.out.println("send MessageNumber " + i + " to topic");
}
}
}
次のコードを繰り返し実行して、「AllMessages」、「LowMessages」、または「HighMessages」サブスクリプションの仮想キューを読み取ります (subscriptionName の値を変更します)。各メッセージは、そのサブスクリプションのキューに残っているメッセージがなくなるまで、読み取られるときに仮想キューから削除されます。複数のサブスクリプションが同じメッセージを受信する可能性があり、フィルタリングされたサブスクリプションがすべてのメッセージを受信するわけではないことに注意してください。
public class GetSbMessSub
{
public static void main(String[] args) throws ServiceException {
Service creds = new Service();
ServiceBusContract service = creds.getservice();
String subscriptionName = "LowMessages";
ReceiveMessageOptions opts = ReceiveMessageOptions.DEFAULT;
opts.setReceiveMode(ReceiveMode.PEEK_LOCK);
ReceiveSubscriptionMessageResult resultQM = service.receiveSubscriptionMessage("TestTopic", subscriptionName, opts);
BrokeredMessage message = resultQM.getValue();
if (message != null && message.getMessageId() != null)
{
try {
System.out.println("Subscription: " + subscriptionName);
System.out.println("MessageNumber: " + message.getProperty("MessageNumber"));
service.deleteMessage(message);}
catch (Exception ex){
System.out.println("Inner exception encountered!");
service.unlockMessage(message);}
}
else {System.out.println("There are no more messages.");}
}
}