使用ActiveMQ进行C++与C#的通信2 - 使用C#连接ActiveMQ

一、ActiviteMQ接收和发送消息基本流程

流程图和操作步骤转自《ActiveMQ 即时通讯服务 浅析》。


发送消息的基本步骤:

(1)、创建连接使用的工厂类JMS ConnectionFactory

(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动

(3)、使用连接Connection 建立会话Session

(4)、使用会话Session和管理对象Destination创建消息生产者MessageSender

(5)、使用消息生产者MessageSender发送消息 

消息接收者从JMS接受消息的步骤

(1)、创建连接使用的工厂类JMS ConnectionFactory

(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动

(3)、使用连接Connection 建立会话Session

(4)、使用会话Session和管理对象Destination创建消息接收者MessageReceiver

(5)、使用消息接收者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver消息接收者必须实现了MessageListener接口,需要定义onMessage事件方法。


二、使用C#连接ActiveMQ

1、从官方网站下载最新版的Apache.NMS:http://activemq.apache.org/nms/download.html,需要下载Apache.NMS和Apache.NMS.ActiveMQ。

2、创建C#控制台项目,引入Apache.NMS.dll和Apache.NMS.ActiveMQ.dll。

3、发送消息代码

扫描二维码关注公众号,回复: 2868820 查看本文章
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string queuesNameESF = "queue://test.log";
                Uri uri = new Uri("activemq:tcp://localhost:61616");
                IConnectionFactory factory = new ConnectionFactory(uri);
                using (IConnection conn = factory.CreateConnection("system", "manager"))
                {
                    using (ISession session = conn.CreateSession())
                    {
                        IDestination destination = SessionUtil.GetDestination(session, queuesNameESF);
                        using (IMessageProducer producer = session.CreateProducer(destination))
                        {
                            conn.Start();
                            ITextMessage request = session.CreateTextMessage("Test sender message.");
                            producer.Send(request);
                            Console.WriteLine("Send message success.");
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
4、接收消息代码

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string queuesNameESF = "queue://test.log";
                Uri uri = new Uri("activemq:tcp://localhost:61616?wireFormat.maxInactivityDuration=0");
                IConnectionFactory factory = new ConnectionFactory(uri);
                using (IConnection conn = factory.CreateConnection("system", "manager"))
                {
                    using (ISession session = conn.CreateSession())
                    {
                        conn.Start();
                        IDestination destination = SessionUtil.GetDestination(session, queuesNameESF);
                        using (IMessageConsumer consumer = session.CreateConsumer(destination))
                        {
                            int msgCount = 0;
                            ITextMessage message = consumer.Receive(new TimeSpan(0, 0, 0, 0, 10)) as ITextMessage;
                            while (message != null)
                            {
                                Console.WriteLine("Receive message: " + message.Text);
                                msgCount++;
                                message = consumer.ReceiveNoWait() as ITextMessage;
                            }
                            Console.WriteLine("Receive message count: " + msgCount);
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
5、注意事项

(1)在conf/activemq.xml文件中可以找到ActiveMQ的连接属性(参考配置ActiveMQ的Transport Connectors):

<transportConnectors>
	<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
	<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
	<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
	<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
	<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
	<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

(2)在conf/credentials.properties文件中可以找到连接的用户名、密码:

activemq.username=system
activemq.password=manager
guest.password=password


猜你喜欢

转载自blog.csdn.net/pigautumn/article/details/76825150