.NET 组件连接 activemq

组件安装

Install-Package Apache.NMS.ActiveMQ

.NET 组件连接 activemq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Commands;
using Apache.NMS.Util;
using Microsoft.Extensions.Configuration;

namespace GraphqlApp.BackendAPI.Services
{
    public class MqService
    {
        private string _mqUrl = string.Empty;
        private string _Q_Biz1 = string.Empty;


        public string Q_Biz1
        {
            get {
                return _Q_Biz1;
            }
        }

        public MqService(IConfiguration configuration)
        {
            _mqUrl = configuration.GetValue<string>("Mq:MqUrl");

            _Q_Biz1 = configuration.GetValue<string>("Mq:Q_Biz1");
        }

        private IConnection CreateConnection()
        {

            Uri _uri = new Uri(String.Concat($"activemq:failover:({_mqUrl})"));
            IConnectionFactory factory = new ConnectionFactory(_uri);

            var result = factory.CreateConnection();
            result.AcknowledgementMode = AcknowledgementMode.ClientAcknowledge;
            return result;
        }

        public void Product(string queuesName, string msg)
        {
            Task.Run(() =>
            {
                using (IConnection _conn = CreateConnection())
                {

                    using (Apache.NMS.ISession _session = _conn.CreateSession())
                    {
                        IDestination _destination = SessionUtil.GetDestination(_session, queuesName);
                        using (IMessageProducer producer = _session.CreateProducer(_destination))
                        {
                            ITextMessage request = _session.CreateTextMessage(msg);
                            producer.Send(request);
                        }
                    }
                }
            });
        }

        public void Consume(string queuesName, Func<string, int> func)
        {
            Task.Run(() =>
            {
                using (IConnection conn = this.CreateConnection())
                {   
                    using (ISession session = conn.CreateSession(AcknowledgementMode.ClientAcknowledge))
                    {   
                        conn.Start();
                        IDestination destination = SessionUtil.GetDestination(session, queuesName);
                        using (IMessageConsumer consumer = session.CreateConsumer(destination))
                        {
                            consumer.Listener += (IMessage message) =>
                            {
                                ITextMessage msg = (ITextMessage)message;
                                Console.WriteLine("从MQ接收到消息:" + msg.Text);

                                var funcResult = func(msg.Text);
                                if (funcResult > 0)
                                    msg.Acknowledge();

                            };
                            Console.ReadLine();
                        }
                    }
                }
            });

            //Console.ReadLine();

        }




    }
}
相关推荐
friklogff5 小时前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net
.Net Core 爱好者12 小时前
Redis实践之缓存:设置缓存过期策略
java·redis·缓存·c#·.net
Crazy Struggle16 小时前
.NET 7+Angular 4 轻量级新零售进销存系统
.net·angular·进销存系统
dot.Net安全矩阵16 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
EdisonZhou17 小时前
大模型应用开发初探 : 通用函数调用Planner
aigc·.net·.net core
时光追逐者18 小时前
分享6个.NET开源的AI和LLM相关项目框架
人工智能·microsoft·ai·c#·.net·.netcore
Java资深爱好者1 天前
VB.NET中如何利用ASP.NET进行Web开发
前端·asp.net·.net
Lingbug1 天前
.Net日志组件之NLog的使用和配置
后端·c#·.net·.netcore
那个那个鱼2 天前
.NET 框架版本年表
开发语言·c#·.net
小乖兽技术2 天前
fo-dicom,第一个基于.NET Standard 2.0 开发的DICOM开源库
.net·fo-dicom