/// <summary> /// 功能:创建一个 Publisher 实例 /// </summary> /// <param name="messageQueue">mq 连接</param> /// <param name="queueName">队列名称</param> public ActiveMessageQueueMessagePublishers(ActiveMessageQueue messageQueue, string queueName) { m_messageQueue = messageQueue; m_publishers = new Dictionary <string, ActiveMessageQueueMessagePublisher>(StringComparer.OrdinalIgnoreCase); m_channelDeliver = messageQueue.GetChannelDeliver(); m_receiverDeliver = messageQueue.GetReceiverDeliver(); foreach (var connectionPair in messageQueue.GetConnections()) { var publisher = new ActiveMessageQueueMessagePublisher(connectionPair.Value, queueName); m_publishers[connectionPair.Key] = publisher; } }
/// <summary> /// 功能:初始化组件 /// </summary> void IComponent.Init() { foreach (var kv in Channels) { var channel = kv.Value; var connecturi = new Uri(channel.Uri); var connection = default(IConnection); var connectionFactory = new ConnectionFactory(connecturi); if (string.IsNullOrEmpty(channel.UserName)) { connection = connectionFactory.CreateConnection(); } else { connection = connectionFactory.CreateConnection(channel.UserName, channel.Password ?? ""); } connection.Start(); m_connections[kv.Key] = connection; var conn = connection as Connection; if (conn != null && IsAsync) { conn.AsyncSend = true; conn.AsyncClose = true; conn.SendAcksAsync = true; } if (ChannelDelivers != null) { m_channelDeliver = new CompositeChannelDeliver(); foreach (JObject deliver in ChannelDelivers) { ((CompositeChannelDeliver)m_channelDeliver).Add(CreateChannelDeliver(deliver)); } } if (ReceiverDelivers != null) { m_receiverDeliver = new CompositeReceiverDeliver(); foreach (JObject deliver in ReceiverDelivers) { ((CompositeReceiverDeliver)m_receiverDeliver).Add(CreateReceiverDeliver(deliver)); } } } }
/// <summary> /// 功能:添加一个消息通道分发器 /// </summary> /// <param name="channelDeliver">消息通道分发器</param> public void Add(IActiveMqChannelDeliver channelDeliver) { m_channelDelivers.Add(channelDeliver); }
/// <summary> /// 功能:设置队列分发器 /// </summary> /// <param name="channelDeliver"></param> public void SetChannelDeliver(IActiveMqChannelDeliver channelDeliver) { m_channelDeliver = channelDeliver; }