packagecom.sec;importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageConsumer;importjavax.jms.MessageListener;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnectionFactory;importorg.apache.activemq.command.ActiveMQDestination;importorg.apache.activemq.ActiveMQConnection;public classJmsClient
{privateString url;privateString regRequestQueue;privateString regResponseQueue;privateString requestQueue;privateString responseQueue;privateString id;privateString selector;privateConnection connection;privateSession session;privateDestination regRequestDestination;privateDestination regResponseDestination;privateDestination requestDestination;privateDestination responseDestination;privateMessageProducer regProducer;privateMessageConsumer regConsumer;privateMessageProducer requestProducer;privateMessageConsumer requestConsumer;privateTextMessage textMessage;public void init() throwsJMSException {//-----------------创建会话-----------------------------------------------------//1.创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("user", "user", url);//2.创建Connection
connection =connectionFactory.createConnection();//3.启动连接
connection.start();//4.创建会话 第一个参数:是否在事务中去处理, 第二个参数.应答模式
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//----------------初始化注册变量--------------------------------------------------//1.创建一个目标 注册请求队列
regRequestDestination =session.createQueue(regRequestQueue);//2.创建一个生产者
regProducer =session.createProducer(regRequestDestination);//3.创建一个目标 注册响应队列
regResponseDestination =session.createQueue(regResponseQueue);//4.创建一个注册响应队列消费者
regConsumer =session.createConsumer(regResponseDestination);//5.监听注册响应队列
setRegResponseQueueListener();//----------------初始化业务请求变量-----------------------------------------------//1.创建一个目标 业务请求队列
requestDestination =session.createQueue(requestQueue);//2.创建一个业务请求队列生产者
requestProducer =session.createProducer(requestDestination);//3.创建一个目标业务响应队列
responseDestination =session.createQueue(responseQueue);
}//注册请求过程
public void sendRegRequest() throwsJMSException {//1.格式转换
textMessage = session.createTextMessage("regRequestQueue");//2.发送消息
regProducer.send(textMessage);
System.out.println("发送消息:regRequestQueue");
}//业务请求过程
public void sendRequest(String msg) throwsJMSException {//1.格式转换
textMessage =session.createTextMessage(msg);
textMessage.setStringProperty("ID", id);//2.发送消息
requestProducer.send(textMessage);
System.out.println("发送消息:" + id + "," +msg);
}//关闭jms连接过程
public void sendCloseRequest() throwsJMSException {
sendRequest("close");
}public void setRegResponseQueueListener() throwsJMSException {//1.创建一个监听器 监听注册响应队列的内容
regConsumer.setMessageListener(newMessageListener() {public voidonMessage(Message message) {
textMessage=(TextMessage) message;try{//2.获得业务响应队列的id
id =textMessage.getText();//3.创建一个业务响应队列消费者
selector = "ID='" + id + "'";
requestConsumer=session.createConsumer(responseDestination, selector);//4.监听业务响应队列
setResponseQueueListner();//5.打印提示
System.out.println("成功读取注册响应队列的内容");//6.关闭注册响应队列
regConsumer.close();
}catch(JMSException e) {
e.printStackTrace();
}
}
});
}public void setResponseQueueListner() throwsJMSException {//3.创建一个业务响应队列监听器
requestConsumer.setMessageListener(newMessageListener() {//4.不要在监听器中关闭自己,可能会不正常
public voidonMessage(Message message) {
TextMessage textMessage=(TextMessage) message;try{
String msg=textMessage.getText();
System.out.println("i am " + id +", i receive =" +msg);
}catch(JMSException e) {
e.printStackTrace();
}
}
});
}public void close() throwsJMSException {
System.out.println("begin close");//session.commit();//如果createSession的第一个参数为true,则transacted,可以用commit,否则不能用commit
session.close(); //先关闭会话
connection.close(); //最后关闭连接
System.out.println("end close");
}public void deleteQueue() throwsJMSException {//关闭队列
if(responseDestination != null) {
((ActiveMQConnection)connection).destroyDestination((ActiveMQDestination) responseDestination);
}
}publicString getUrl()
{returnurl;
}public voidsetUrl(String url)
{this.url =url;
}publicString getRegRequestQueue()
{returnregRequestQueue;
}public voidsetRegRequestQueue(String regRequestQueue)
{this.regRequestQueue =regRequestQueue;
}publicString getRegResponseQueue()
{returnregResponseQueue;
}public voidsetRegResponseQueue(String regResponseQueue)
{this.regResponseQueue =regResponseQueue;
}publicString getRequestQueue()
{returnrequestQueue;
}public voidsetRequestQueue(String requestQueue)
{this.requestQueue =requestQueue;
}publicString getResponseQueue()
{returnresponseQueue;
}public voidsetResponseQueue(String responseQueue)
{this.responseQueue =responseQueue;
}
}