私のインフラストラクチャ:
- メイン - ServiceStack の自己ホスト型コンソール アプリ。「メイン」はメッセージを MQ に送信します。
- 背景 - ServiceStack セルフ ホスト コンソール アプリ。「バックグラウンド」は MQ からメッセージを受け取ります。
- ローカルにインストールされた Redis
「メイン」AppHost で、Redis マネージャーを構成します。
container.Register<IRedisClientsManager>(
new PooledRedisClientManager("localhost:6379"));
次に、サービスのどこかでこのコードを実行します。
using (var client = new RedisMessageQueueClient(TryResolve<IRedisClientsManager>()))
{
client.Publish(new TestMessage { Value = "From ping" });
}
すべてがうまく機能し、「背景」でメッセージを受け取ることができます。しかし、このコードをクラスにラップすると問題が発生します。
public class MessageQueuePublisher : IMessageQueuePublisher
{
public void Publish(object message)
{
using (var client = new RedisMessageQueueClient(
EndpointHost.AppHost.TryResolve<IRedisClientsManager>()))
{
client.Publish(message);
}
}
}
前のコードが実行されたのとまったく同じ場所から MessageQueuePublisher.Publish メソッドを呼び出すと、正しく動作しているように見えますが (例外はスローされません)、メッセージは「バックグラウンド」に到達しません。
これでよろしいですか?