结构图略:和JMS编程模型的结构图类似
ConnectionFactory
由于.NET环境并不能参与JNDI的上下文:
采用直接实例化的方式:
ConnectionFactory factory = ConnectionFactory.NewInstance(host, port);
也可以为当前生成的连接工厂起一个名字:
ConnectionFactory factory = ConnectionFactory.NewInstance(host, port, name);
Connections
为客户端和消息服务器建立的一个连接,他可以创建Session,并且可以创建多个Session(稍后介绍)。
获取方法:
使用匿名
Connection connection = factory.CreateConnection();
给出消息服务器的用户密码:
Connection connection = factory.CreateConnection(username, password);
当使用完连接的时候,你需要关闭连接,否则该连接会一直保持。关闭连接的时候它同时会关闭该连接产生的 Session 。
connection.close();
连接创建好后,一般先调用 start() 方法。
Sessions
Sessions是单线程的,用来创建消息发送者和消息接受者的上下文。Sessions 同时还可以注册Message Listeners
获取方法:
Session session=connection.CreateSession(false,AcknowledgeMode.AutoAcknowledge); Session session=connection.CreateSession(false,AcknowledgeMode.ClientAcknowledge); Session session=connection.CreateSession(false,AcknowledgeMode.DupsOKAcknowledge);
三种应答模式的差别,请参照 AMQ 相关概念中的“应答模式”部分。
Destinations
Destinations是指消息发送客户端的消息目标和消息接收客户端的消息来源,它是预先在jms.xml定义好的。
获取方式:
Destination dest = session.CreateQueue("testQueue");
Destination dest = session.CreateTopic("testTopic");
或者:
//通过下面这种方式创建出来的Queue,代表一个远程 AMQ 服务器上的队列,@符号之前
//是队列的名称,@符号之后是服务器路由名。发送消息到该队列时,会将消息路由到@符号之后
//指定的服务器,并将消息放进@符号之前指定的队列。
Destination dest = session.CreateQueue("testQueue@ServerRouterName");
Message Producers
message producer是由Session创建的一个对象,它是用来向 Destinations 发送信息的。
MessageProducer sender = session.CreateProducer(dest);
注意:
在.NET客户端中,必须在创建MessageProducer时指定Destinations ,不能在发送时再指定。
创建好后,可以继续创建消息,然后调用发送方法发送消息。
TextMessage message = session.CreateTextMessage(“test message”); sender.send(message);
Message Consumers
message consumer是指从 destination 接收消息的对象
MessageConsumer receiver = session.CreateConsumer(dest);
你还能使用 Session.CreateDurableSubscriber 创建一个持久的Topic注册对象。
它和普通的Topic注册对象的区别是不管当前是否在线,均能收到对应destination的全部信息。
String subName = "MySub"; MessageConsumer topicSubscriber = session.CreateDurableSubscriber(dest, subName);
停止持久的Topic注册对象使用以下方法。
topicSubscriber.Close();
使用Consumer前应该先调用 connection.start() 方法。
connection.Start(); Message m = consumer.Receive(); //或者 connection.Start(); Message m = consumer.Receive(3000); // 3秒后超时
Message Listeners
这是为异步调用设计的一种方式。
它是把消息监听器注册到consumer中。
receiver.MessageListener = new MessageListener(OnMessage);
private void OnMessage(Apusic.MQ.Message msg) {
if (msg is TextMessage) {
ctlReceivedMsg.AppendText(((TextMessage)msg).Text);
ctlReceivedMsg.AppendText(" " + msg.GetStringProperty("JMSXRoutingTrack"));
ctlReceivedMsg.AppendText("\r\n");
msg.Acknowledge();
}
}