.NET+RabbtiMQ

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 记得改为一致

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值