Add .NET Core 2.1 versions
This commit is contained in:
12
vote/dotnet/Vote/Messaging/IMessageQueue.cs
Normal file
12
vote/dotnet/Vote/Messaging/IMessageQueue.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using NATS.Client;
|
||||
using Vote.Messaging.Messages;
|
||||
|
||||
namespace Vote.Messaging
|
||||
{
|
||||
public interface IMessageQueue
|
||||
{
|
||||
IConnection CreateConnection();
|
||||
|
||||
void Publish<TMessage>(TMessage message) where TMessage : Message;
|
||||
}
|
||||
}
|
23
vote/dotnet/Vote/Messaging/MessageHelper.cs
Normal file
23
vote/dotnet/Vote/Messaging/MessageHelper.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using Newtonsoft.Json;
|
||||
using Vote.Messaging.Messages;
|
||||
using System.Text;
|
||||
|
||||
namespace Vote.Messaging
|
||||
{
|
||||
public class MessageHelper
|
||||
{
|
||||
public static byte[] ToData<TMessage>(TMessage message)
|
||||
where TMessage : Message
|
||||
{
|
||||
var json = JsonConvert.SerializeObject(message);
|
||||
return Encoding.Unicode.GetBytes(json);
|
||||
}
|
||||
|
||||
public static TMessage FromData<TMessage>(byte[] data)
|
||||
where TMessage : Message
|
||||
{
|
||||
var json = Encoding.Unicode.GetString(data);
|
||||
return (TMessage)JsonConvert.DeserializeObject<TMessage>(json);
|
||||
}
|
||||
}
|
||||
}
|
35
vote/dotnet/Vote/Messaging/MessageQueue.cs
Normal file
35
vote/dotnet/Vote/Messaging/MessageQueue.cs
Normal file
@ -0,0 +1,35 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NATS.Client;
|
||||
using Vote.Messaging.Messages;
|
||||
|
||||
namespace Vote.Messaging
|
||||
{
|
||||
public class MessageQueue : IMessageQueue
|
||||
{
|
||||
protected readonly IConfiguration _configuration;
|
||||
protected readonly ILogger _logger;
|
||||
|
||||
public MessageQueue(IConfiguration configuration, ILogger<MessageQueue> logger)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void Publish<TMessage>(TMessage message)
|
||||
where TMessage : Message
|
||||
{
|
||||
using (var connection = CreateConnection())
|
||||
{
|
||||
var data = MessageHelper.ToData(message);
|
||||
connection.Publish(message.Subject, data);
|
||||
}
|
||||
}
|
||||
|
||||
public IConnection CreateConnection()
|
||||
{
|
||||
var url = _configuration.GetValue<string>("MessageQueue:Url");
|
||||
return new ConnectionFactory().CreateConnection(url);
|
||||
}
|
||||
}
|
||||
}
|
15
vote/dotnet/Vote/Messaging/Messages/Events/VoteCastEvent.cs
Normal file
15
vote/dotnet/Vote/Messaging/Messages/Events/VoteCastEvent.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace Vote.Messaging.Messages
|
||||
{
|
||||
public class VoteCastEvent : Message
|
||||
{
|
||||
public override string Subject { get { return MessageSubject; } }
|
||||
|
||||
public string VoterId {get; set;}
|
||||
|
||||
public string Vote {get; set; }
|
||||
|
||||
public static string MessageSubject = "events.vote.votecast";
|
||||
}
|
||||
}
|
16
vote/dotnet/Vote/Messaging/Messages/Message.cs
Normal file
16
vote/dotnet/Vote/Messaging/Messages/Message.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace Vote.Messaging.Messages
|
||||
{
|
||||
public abstract class Message
|
||||
{
|
||||
public string CorrelationId { get; set; }
|
||||
|
||||
public abstract string Subject { get; }
|
||||
|
||||
public Message()
|
||||
{
|
||||
CorrelationId = Guid.NewGuid().ToString();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user