StackExchange.Redis
게시 구독
수색…
기초
연결 되면 ISubscriber.Publish
메서드를 호출하여 메시지를 게시 할 수 있습니다.
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
// publish a message to the 'chat' channel
subscriber.Publish("chat", "This is a message")
소비자는 ISubscriber.Subscribe
메서드를 사용하여 채널을 구독 할 수 있습니다. 게시자가 보낸 메시지는이 메서드에 전달 된 핸들러에서 처리합니다.
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
// subscribe to a messages over the 'chat' channel
subscriber.Subscribe("chat", (channel, message) => {
// do something with the message
Console.WriteLine((string)message);
});
복잡한 데이터 (JSON)
페이로드를 게시하기 전에 serialize하여보다 복잡한 메시지를 브로드 캐스팅 할 수 있습니다.
// definition of a message
public class ChatMessage
{
public Guid Id { get; set; }
public string User { get; set; }
public string Text { get; set; }
}
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
var message = new ChatMessage
{
Id = Guid.NewGuid(),
User = "User 1234",
Text = "Hello World!"
};
// serialize a ChatMessage
// this uses JIL to serialize to JSON
var json = JSON.Serialize(message);
// publish the message to the 'chat' channel
subscriber.Publish("chat", json)
그런 다음 가입자는 메시지를 deserialize해야합니다.
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
// subscribe to messages over the 'chat' channel
subscriber.Subscribe("chat", (channel, json) => {
var message = JSON.Deserialize<ChatMessage>(json);
// do something with the message
Console.WriteLine($"{message.User} said {message.Text}");
});
복잡한 데이터 (Protobuf)
StackExchange.Redis는 또한 pub / sub 채널을 통해 바이트를 전송하는 것을 지원합니다. 여기서는 protobuf-net 을 사용하여 메시지를 전송하기 전에 바이트 배열로 직렬화합니다.
// definition of a message (marked up with Protobuf attributes)
[ProtoContract]
public class ChatMessage
{
[ProtoMember(1)]
public Guid Id { get; set; }
[ProtoMember(2)]
public string User { get; set; }
[ProtoMember(3)]
public string Text { get; set; }
}
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
var message = new ChatMessage
{
Id = Guid.NewGuid(),
User = "User 1234",
Text = "Hello World!"
};
using (var memoryStream = new MemoryStream())
{
// serialize a ChatMessage using protobuf-net
Serializer.Serialize(memoryStream, message);
// publish the message to the 'chat' channel
subscriber.Publish("chat", memoryStream.ToArray());
}
다시 가입자는 수신시 메시지를 deserialize해야합니다.
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
// subscribe to messages over the 'chat' channel
subscriber.Subscribe("chat", (channel, bytes) => {
using (var memoryStream = new MemoryStream(bytes))
{
var message = Serializer.Deserialize<ChatMessage>(memoryStream);
// do something with the message
Console.WriteLine($"{message.User} said {message.Text}");
}
});
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow