Esempio n. 1
0
        /// <summary>
        /// 根据程序集名获取消息队列信息
        /// </summary>
        /// <param name="rabbitConfig">rabbit配置</param>
        /// <param name="assemblyName">程序集名</param>
        /// <param name="rpcClientAssemblyWrap">rpc客户端程序集包装</param>
        /// <returns>消息队列信息</returns>
        private static MessageQueueInfo GetMessageQueueByAssemblyName(RabbitConfigInfo rabbitConfig, string assemblyName, out RpcClientAssemblyWrapInfo rpcClientAssemblyWrap)
        {
            rpcClientAssemblyWrap = null;
            if (rabbitConfig == null || rabbitConfig.Rabbit.IsNullOrLength0())
            {
                return(null);
            }

            foreach (var r in rabbitConfig.Rabbit)
            {
                if (r.Exchanges.IsNullOrCount0())
                {
                    continue;
                }

                foreach (var e in r.Exchanges)
                {
                    if (e.Queues.IsNullOrCount0())
                    {
                        continue;
                    }

                    foreach (var q in e.Queues)
                    {
                        if (q.RpcClientAssemblyInfos.IsNullOrLength0())
                        {
                            continue;
                        }

                        var rpcClientAssembly = q.RpcClientAssemblyInfos.Where(p => p.Name == assemblyName).FirstOrDefault();
                        if (rpcClientAssembly == null)
                        {
                            continue;
                        }

                        rpcClientAssemblyWrap = new RpcClientAssemblyWrapInfo()
                        {
                            RpcClientAssembly = rpcClientAssembly,
                            RabbitVirtualPath = r
                        };

                        var msgQueue = e.ToMessageQueue();
                        msgQueue.AutoDelQueue = q.AutoDelQueue;
                        msgQueue.Qos          = q.Qos;
                        msgQueue.Queue        = q.Name;
                        msgQueue.RoutingKeys  = q.RoutingKeys;

                        return(msgQueue);
                    }
                }
            }

            return(null);
        }
        /// <summary>
        /// 根据虚拟路径获取交换机列表
        /// </summary>
        /// <param name="rabbitConfig">rabbit配置</param>
        /// <param name="virtualPath">虚拟路径</param>
        /// <returns>交换机列表</returns>
        public static IList <RabbitExchangeInfo> GetExchanges(this RabbitConfigInfo rabbitConfig, string virtualPath = RabbitConnectionInfo.DEFAULT_VIRTUAL_PATH)
        {
            if (rabbitConfig == null)
            {
                return(null);
            }

            var virtObj = rabbitConfig.Rabbit.Where(p => p.VirtualPath == virtualPath).FirstOrDefault();

            if (virtObj == null)
            {
                return(null);
            }

            return(virtObj.Exchanges);
        }