|
|
|
|
using EntrustSettle.Common;
|
|
|
|
|
using EntrustSettle.IServices;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using RabbitMQ.Client;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace EntrustSettle.Services
|
|
|
|
|
{
|
|
|
|
|
public class QueueService : IQueueService
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger<QueueService> logger;
|
|
|
|
|
|
|
|
|
|
public QueueService(ILogger<QueueService> logger)
|
|
|
|
|
{
|
|
|
|
|
this.logger = logger;
|
|
|
|
|
}
|
|
|
|
|
public void Push(string opType, string compId, string data)
|
|
|
|
|
{
|
|
|
|
|
var mqUrl = AppSettings.app("RabbitMQ", "ConnectionString");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string exchangeName = "amq.direct";
|
|
|
|
|
string queueName = "feedback.output." + compId;
|
|
|
|
|
|
|
|
|
|
ConnectionFactory factory = new ConnectionFactory();
|
|
|
|
|
factory.Uri = new Uri(mqUrl);
|
|
|
|
|
|
|
|
|
|
using (IConnection conn = factory.CreateConnection())
|
|
|
|
|
using (IModel mqModel = conn.CreateModel())
|
|
|
|
|
{
|
|
|
|
|
mqModel.ExchangeDeclare(exchangeName, ExchangeType.Direct, true);
|
|
|
|
|
|
|
|
|
|
mqModel.QueueDeclare(queueName, false, false, false, null);
|
|
|
|
|
|
|
|
|
|
mqModel.QueueBind(queueName, exchangeName, queueName, null);
|
|
|
|
|
|
|
|
|
|
IBasicProperties props = mqModel.CreateBasicProperties();
|
|
|
|
|
props.DeliveryMode = 2;
|
|
|
|
|
|
|
|
|
|
byte[] messageBodyBytes = Encoding.UTF8.GetBytes(SharpZipLib.Compress(data));
|
|
|
|
|
|
|
|
|
|
mqModel.BasicPublish(exchangeName, queueName, props, messageBodyBytes);
|
|
|
|
|
|
|
|
|
|
conn.Close();
|
|
|
|
|
|
|
|
|
|
logger.LogInformation($"{opType},已发送数据到消息队列,队列名称:【{queueName}】,数据内容:{Environment.NewLine}{data}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception)
|
|
|
|
|
{
|
|
|
|
|
throw;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|