using CQIE.Books.Models;
using FreeRedis;
using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CQIE.Books.DataAccesss.Imps
{
public class IInventoryService
{
private readonly _DbContext Db;
public IInventoryService(_DbContext db)
{
Db = db;
}
public ConnectionFactory factory = new ConnectionFactory()
{
HostName = "localhost",
Port = 5672,
UserName = "guest",
Password = "guest"
};
public record InventoryRequess
{
public int Id { get; set; }
public string Name { get; set; }
public string publisher { get; set; }
public string Author { get; set; }
public string Mummary { get; set; }
public DateTime LastUpdated { get; set; }
public int Amount { get; set; }
}
public bool Monitor()
{
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
var exchange = "msg_test";
channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName, exchange, routingKey: "");
Console.WriteLine("开始监听消息...");
while (true)
{
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
byte[] body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($"- 接收到消息:{message}");
InventoryRequess inventoryRequess = JsonConvert.DeserializeObject<InventoryRequess>(message);
Console.WriteLine(inventoryRequess.Id);
Inventory inventory= Db.Inventories.Where(w => w.Id == inventoryRequess.Id).FirstOrDefault();
inventory.Amount = inventoryRequess.Amount;
Db.Inventories.Update(inventory);
if (Db.SaveChanges() > 0)
Console.WriteLine("已更改");
else
Console.WriteLine("未更改");
};
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
}
}
}
}
监听器以上为
发送代码如下
/// <summary>
/// 图书删除发送到队列
/// </summary>
/// <param name="mediator"></param>
/// <returns></returns>
[HttpGet]
public async Task<IActionResult> deletebookbook( int bookid)
{
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
var exchange = "deletebook";
channel.ExchangeDeclare(exchange, type: ExchangeType.Fanout);
var message = JsonConvert.SerializeObject(bookid);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange, routingKey: "", basicProperties: null, body: body);
Console.WriteLine($"- 发送消息:{message}");
return Ok();
}
exchange 记得改为一致