Example #1
0
 public QueuePublisher(ISession session, string queueName)
 {
     this.session    = session;
     DestinationName = queueName;
     queue           = SessionUtil.GetQueue(session, DestinationName);
     Producer        = session.CreateProducer(queue);
 }
        /// <summary>
        /// 测试队列
        /// </summary>
        static void TestQueue()
        {
            Console.Title = "生产者2";


            //生产者
            var __uri = new Uri(string.Concat(connString));
            IConnectionFactory _factory = new ConnectionFactory(__uri);

            using (IConnection _conn = _factory.CreateConnection(user, pwd))
            {
                using (ISession _session = _conn.CreateSession())
                {
                    IDestination _destination = SessionUtil.GetQueue(_session, queueName);
                    using (IMessageProducer producer = _session.CreateProducer(_destination))
                    {
                        //可以写入字符串,也可以是一个xml字符串等
                        while (true)
                        {
                            Console.WriteLine("请输入队列内容:");
                            string       context = Console.ReadLine();
                            ITextMessage request = _session.CreateTextMessage(context);
                            producer.Send(request);
                            Console.WriteLine("发送新新队列信息:" + context);
                            System.Threading.Thread.Sleep(200);
                        }
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// 队列测试
        /// </summary>
        /// <param name="args"></param>
        static void TestQueue()
        {
            Console.Title = "队列--消费者2";

            //消费者
            System.Threading.Tasks.Task.Run(() =>
            {
                Uri _uri = new Uri(String.Concat(connString));
                IConnectionFactory factory = new ConnectionFactory(_uri);
                using (IConnection conn = factory.CreateConnection(user, pwd))
                {
                    using (ISession session = conn.CreateSession())
                    {
                        conn.Start();
                        IDestination destination = SessionUtil.GetQueue(session, queueName);
                        using (IMessageConsumer consumer = session.CreateConsumer(destination))
                        {
                            consumer.Listener += (IMessage message) =>
                            {
                                ITextMessage msg = (ITextMessage)message;
                                Console.WriteLine("接收消息:" + msg.Text);
                            };
                            Console.ReadLine();
                        }
                    }
                }
            });

            Console.ReadLine();
        }
Example #4
0
        public IMessage CreateJmsMessage(TransportMessage message, ISession session)
        {
            var jmsmessage = encoderPipeline.Encode(message, session);

            // We only assign the correlation id because the message id is chosen by the broker.
            jmsmessage.NMSCorrelationID = message.CorrelationId;

            if (message.TimeToBeReceived < TimeSpan.FromMilliseconds(uint.MaxValue))
            {
                jmsmessage.NMSTimeToLive = message.TimeToBeReceived;
            }

            if (message.Headers.ContainsKey(Headers.EnclosedMessageTypes))
            {
                jmsmessage.NMSType = message.Headers[Headers.EnclosedMessageTypes].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault();
            }

            jmsmessage.NMSDeliveryMode = message.Recoverable ? MsgDeliveryMode.Persistent : MsgDeliveryMode.NonPersistent;

            if (message.ReplyToAddress != null && message.ReplyToAddress != Address.Undefined)
            {
                jmsmessage.NMSReplyTo = SessionUtil.GetQueue(session, message.ReplyToAddress.Queue);
            }

            foreach (var header in message.Headers)
            {
                jmsmessage.Properties[ConvertMessageHeaderKeyToActiveMQ(header.Key)] = header.Value;
            }

            return(jmsmessage);
        }
Example #5
0
        public void CreateQueue(string address = null)
        {
            var task = _activeMqSessionHelper.UseSession(async session =>
            {
                using (var queue = SessionUtil.GetQueue(session.Session, address ?? Address))
                {
                }
            });

            AsyncHelpers.RunSync(() => task);
        }
        /// <summary>
        /// 订阅主题信息
        /// </summary>
        public bool SubscribeMsg(MQMsgType msgType, string topicName, string filter = null)
        {
            try
            {
                if (!connection.IsStarted)
                {
                    return(false);
                }


                //建立Session
                ISession session = connection.CreateSession();

                IMessageConsumer consumer = null;

                //创建Consumer接受消息
                if (msgType == MQMsgType.TOPIC)
                {
                    ITopic topic = SessionUtil.GetTopic(session, topicName);

                    if (String.IsNullOrEmpty(filter))
                    {
                        consumer = session.CreateConsumer(topic);
                    }
                    else
                    {
                        consumer = session.CreateConsumer(topic, filter);
                    }
                }
                else if (msgType == MQMsgType.QUEUE)
                {
                    IQueue queue = SessionUtil.GetQueue(session, topicName);

                    if (String.IsNullOrEmpty(filter))
                    {
                        consumer = session.CreateConsumer(queue);
                    }
                    else
                    {
                        consumer = session.CreateConsumer(queue, filter);
                    }
                }

                consumer.Listener += new MessageListener(OnMessage);

                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private void createConnection()
        {
            Uri connectUri = new Uri(Settings.Default.Activemq_url);
            var factory    = new NMSConnectionFactory(connectUri);

            connection = factory.CreateConnection(Settings.Default.Activemq_user, Settings.Default.Activemq_password);
            connection.Start();
            session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
            var queue = SessionUtil.GetQueue(session, Settings.Default.Activemq_queue);

            producer = session.CreateProducer(queue);
            producer.DeliveryMode = MsgDeliveryMode.Persistent;
        }
Example #8
0
        public Form1()
        {
            InitializeComponent();
            sequence = 0;
            IConnectionFactory connectionFactory = EIPBusConnection.CreateOrGetConnection(new Uri("activemq:tcp://localhost:61616"));
            IConnection        connection        = connectionFactory.CreateConnection("admin", "admin");

            session = connection.CreateSession();
            IDestination destination = SessionUtil.GetQueue(session, "DemoQueue");

            producer = producer = session.CreateProducer(destination);
            connection.Start();
        }
Example #9
0
        /// <summary>
        /// A Psi Component to send messages through ActiveMQ
        ///
        /// messages are sent as string wrapped in xml.
        /// </summary>
        /// <param name="pipeline"></param>
        /// <param name="destinationName"></param>
        public ActiveMQ(Pipeline pipeline, string destinationRecvName, string destinationSendName) : base(pipeline)
        {
            checkConfig(); //Check that the config has all items we need, otherwise throw an exception

            //Start ActiveMQ server
            this.activeMQProcess = ActiveMQProcess.Instance;
            this.activeMQProcess.Start();

            //Connect to ActiveMQ Server (try several times in case the process takes a while to get started.
            IConnectionFactory factory = new NMSConnectionFactory(
                $"{Config.Global.ActiveMQ.Protocol}://{Config.Global.ActiveMQ.Host}:{Config.Global.ActiveMQ.Port}"
                );

            bool notConnected = true;
            int  attempts     = 0;
            int  maxAttempts  = 5;

            while (notConnected && attempts < maxAttempts)
            {
                try
                {
                    this.connection = factory.CreateConnection();
                    notConnected    = false;
                }
                catch (Apache.NMS.NMSConnectionException)
                {
                    attempts++;
                    System.Threading.Thread.Sleep(1000);
                }
            }
            Console.WriteLine($"{Config.Global.ActiveMQ.Protocol}://{Config.Global.ActiveMQ.Host}:{Config.Global.ActiveMQ.Port}");
            this.connection = factory.CreateConnection(); //Last try to connect to ActiveMQ
            this.session    = this.connection.CreateSession();

            this.destinationSendName = destinationSendName;
            this.destinationRecvName = destinationRecvName;

            //Create destinations to send and receive messages
            this.destinationSend       = SessionUtil.GetQueue(session, this.destinationSendName);
            this.destinationReceive    = SessionUtil.GetQueue(session, this.destinationRecvName);
            this.consumer              = session.CreateConsumer(this.destinationReceive);
            this.producer              = session.CreateProducer(this.destinationSend);
            this.producer.DeliveryMode = MsgDeliveryMode.NonPersistent; //TODO should this be a parameter?
            this.connection.Start();

            //Setup message listener
            consumer.Listener += new MessageListener(OnMessage);
        }
Example #10
0
 public Task <IQueue> GetQueue(string queueName)
 {
     return(_executor.Run(() => SessionUtil.GetQueue(_session, queueName), CancellationToken));
 }
Example #11
0
 public QueueSubscriber(ISession session, string destination)
 {
     this.session     = session;
     this.destination = destination;
     queue            = SessionUtil.GetQueue(session, this.destination);
 }
 /// <summary>
 /// Extension function to get the destination by parsing the embedded type prefix.
 /// </summary>
 public static IQueue GetQueue(this ISession session, string queueName)
 {
     return(SessionUtil.GetQueue(session, queueName));
 }
Example #13
0
 public Task <IQueue> GetQueue(string queueName)
 {
     return(Task.Factory.StartNew(() => SessionUtil.GetQueue(_session, queueName), CancellationToken, TaskCreationOptions.None, _taskScheduler));
 }
Example #14
0
        /// <summary>
        /// 实现发送数据方法
        /// </summary>
        public bool SendMsg(MQMsgType msgType, string topicName, byte[] data, IDictionary <string, object> properties, int timeToLiveMS, out string msgId)
        {
            try
            {
                msgId = "";
                if (Connection == null)
                {
                    this.logHelper.LogInfoMsg("MQProducer获取到的连接为空,可能是该MQ控件没有启动");
                    return(false);
                }

                if (!Connection.IsStarted)
                {
                    this.logHelper.LogInfoMsg("MQProducer没有连接到MQ");
                    return(false);
                }

                //建立ISession,会话,一个发送或接收消息的线程
                ISession session = Connection.CreateSession();

                //创建Producer接受消息
                if (msgType == MQMsgType.TOPIC)
                {
                    ITopic topic = SessionUtil.GetTopic(session, topicName);
                    Producer = session.CreateProducer(topic);
                }
                else if (msgType == MQMsgType.QUEUE)
                {
                    IQueue queue = SessionUtil.GetQueue(session, topicName);
                    Producer = session.CreateProducer(queue);
                }

                //持久化
                Producer.DeliveryMode = MsgDeliveryMode.NonPersistent;

                //创建消息
                IBytesMessage ibytesMessage = session.CreateBytesMessage();
                if (properties != null)
                {
                    //设置消息属性
                    foreach (KeyValuePair <string, object> pair in properties)
                    {
                        ibytesMessage.Properties[pair.Key] = pair.Value;
                    }
                }
                if (data != null && data.Length > 0)
                {
                    ibytesMessage.WriteBytes(data);
                }

                //发送超时时间,如果timeToLive == 0 则永远不过期
                if (timeToLiveMS != 0)
                {
                    Producer.TimeToLive = TimeSpan.FromMilliseconds((double)timeToLiveMS);
                }

                //向MQ发送消息
                Producer.Send(ibytesMessage);
                msgId = ibytesMessage.NMSMessageId;
                return(true);
            }
            catch (Exception ex)
            {
                this.logHelper.LogErrMsg(ex, "MQProducer发送消息异常");
                msgId = string.Empty;
                return(false);
            }
        }