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); } } } } }
/// <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(); }
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); }
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; }
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(); }
/// <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); }
public Task <IQueue> GetQueue(string queueName) { return(_executor.Run(() => SessionUtil.GetQueue(_session, queueName), CancellationToken)); }
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)); }
public Task <IQueue> GetQueue(string queueName) { return(Task.Factory.StartNew(() => SessionUtil.GetQueue(_session, queueName), CancellationToken, TaskCreationOptions.None, _taskScheduler)); }
/// <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); } }