Advertisement
Guest User

Untitled

a guest
Aug 13th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. public class EnqueueCommand : IDisposable
  2. {
  3.  
  4. private readonly IConnection _conn;
  5. private readonly IModel _channel;
  6. private readonly string _defaultQueue;
  7. public EnqueueCommand(IConfiguration config)
  8. {
  9.  
  10. var factory = new ConnectionFactory
  11. {
  12. UserName = config["RabbitConnectionOptions:UserName"],
  13. Password = config["RabbitConnectionOptions:Passwd"],
  14. VirtualHost = config["RabbitConnectionOptions:VirtualHost"],
  15. HostName = config["RabbitConnectionOptions:Host"]
  16. };
  17.  
  18. _conn = factory.CreateConnection();
  19. _channel = _conn.CreateModel();
  20. _defaultQueue = config["RabbitConnectionOptions:QueueName"];
  21.  
  22. }
  23.  
  24. public void Execute<T>(T message, string queueName = null)
  25. {
  26. var messageBytes = Serialize(message);
  27. _channel.QueueDeclare(queue: queueName ?? _defaultQueue,
  28. durable: true,
  29. exclusive: false,
  30. autoDelete: false,
  31. arguments: null);
  32. _channel.BasicPublish(exchange: string.Empty,
  33. routingKey: queueName ?? _defaultQueue,
  34. basicProperties: null,
  35. body: messageBytes);
  36. }
  37.  
  38. public void ExecuteToExchange<T>(T message, string exchange, string exchangeType)
  39. {
  40. var messageBytes = Serialize(message);
  41. _channel.ExchangeDeclare(exchange: exchange, type: exchangeType);
  42. _channel.BasicPublish(exchange: exchange,
  43. routingKey: string.Empty,
  44. basicProperties: null,
  45. body: messageBytes);
  46. }
  47.  
  48. private static byte[] Serialize<T>(T message)
  49. {
  50. byte[] messageBytes;
  51. if (typeof(T) == typeof(byte[]))
  52. {
  53. messageBytes = message as byte[];
  54. }
  55. else
  56. {
  57. messageBytes = LZ4MessagePackSerializer.Serialize(message,
  58. MessagePack.Resolvers.ContractlessStandardResolver.Instance);
  59. }
  60.  
  61. return messageBytes;
  62. }
  63.  
  64. public void Dispose()
  65. {
  66. _channel?.Dispose();
  67. _conn?.Dispose();
  68. }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement