今回も自分用のメモです。
Event Hubs と Service Bus のキューを試してみました。
Event Hubs
以下のドキュメントを参考に、送信と受信のコンソールアプリを2つ作ってみました。
https://azure.microsoft.com/ja-jp/documentation/articles/event-hubs-programming-guide/
送信
using System;
using System.Text;
using System.Threading;
using Microsoft.ServiceBus.Messaging;
namespace ConsoleDemoEventhabSend
{
class Program
{
static string eventHubName = "testeventhub";
static string connectionString = "SASの送信の接続文字列";
static void Main(string[] args)
{
Console.WriteLine("Press Ctrl-C to stop the sender process");
Console.WriteLine("Press Enter to start now");
Console.ReadLine();
SendingRandomMessages();
}
static void SendingRandomMessages()
{
var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
while (true)
{
try
{
var message = Guid.NewGuid().ToString();
Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message);
eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(message)));
}
catch (Exception exception)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("{0} > Exception: {1}", DateTime.Now, exception.Message);
Console.ResetColor();
}
Thread.Sleep(200);
}
}
}
}
受信
using System;
using System.Text;
using Microsoft.ServiceBus.Messaging;
namespace ConsoleDemoEventhubRecive
{
class Program
{
static string eventHubName = "testeventhub";
static string connectionString = "SASの受信の接続文字列";
static void Main(string[] args)
{
var client = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
EventHubConsumerGroup group = client.GetDefaultConsumerGroup();
var receiver = group.CreateReceiver(client.GetRuntimeInformation().PartitionIds[0]);
bool receive = true;
string myOffset;
while (receive)
{
var message = receiver.Receive();
myOffset = message.Offset;
string body = Encoding.UTF8.GetString(message.GetBytes());
Console.WriteLine(String.Format("Received message offset: {0} \nbody: {1}", myOffset, body));
}
}
}
}
Service bus
以下のドキュメントを参考に、送信と受信のコンソールアプリを2つ作ってみました。
https://azure.microsoft.com/ja-jp/documentation/articles/service-bus-dotnet-get-started-with-queues/
送信
using Microsoft.ServiceBus.Messaging;
namespace ConsoleServicebasSend
{
class Program
{
static void Main(string[] args)
{
var connectionString = "SASの送信の接続文字列";
var queueName = "que01";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var message1 = new BrokeredMessage("1");
client.Send(message1);
var message2 = new BrokeredMessage("2");
client.Send(message2);
}
}
}
受信
using System;
using Microsoft.ServiceBus.Messaging;
namespace ConsoleServicebasRecive
{
class Program
{
static void Main(string[] args)
{
var connectionString = "SASの受信の接続文字列";
var queueName = "que01";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
client.OnMessage(message =>
{
Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>()));
Console.WriteLine(String.Format("Message id: {0}", message.MessageId));
});
Console.ReadLine();
}
}
}
Service Bus を UWP で実装しようとしたら、Nugetでエラー・・・

この辺が関係しているのかな??
https://github.com/Azure/azure-sdk-for-net/issues/1413
もしそうなら、UWPのときはRESTでってことなので、この辺が参考になりそうだけど、まだ試してないっす。
- https://azure.microsoft.com/ja-jp/documentation/articles/service-bus-brokered-tutorial-rest/
- https://azure.microsoft.com/ja-jp/documentation/articles/service-bus-relay-rest-tutorial/
- https://msdn.microsoft.com/en-us/library/hh780771.aspx
まとめ
Service Bus も、 Event Hubs も若干今更感が自分の中であるのですが、前回触ったときにここになんも残してなかったので、ちょっと悩んでみたりもしました。
単純に、異なるネットワークから Service Bus や Event Hubs を使うのは、またちょっと面白いことができそうだなって思ってみたり。
UWP で REST をたたくんだったら、Mobile Apps を使ってなんかアクションを飛ばして、Web サーバ側でなんかやるような実装も意外とありなのかなとか思ってみたり。。
(今回 UWP 使おうと思ったのが、MADOSMAに載せようと思ったからで。。。)
費用的な比較とか、まだしてないので、その辺で現実解がみつかるのかな?とか、
Service Bus キューと Event Hubs では、どんな判断でどっちを使うってなるんだろう?とか、
若干、モヤモヤしてたりします。

コメント