这里单独列出来我也是觉得有点必要的,毕竟JMS总体知识点并不多,这点可能被很多人所忽视.
首选定义:消息的确认是指消息接受者接到消息,并做出了对应的处理之后,它将回送一个确认消息.
对于非事务性会话,创建会话时应该指定确定方式,JMS定义了3种确认方式:
JMS确认3种方式 | |
Auto_ACKnowledge | 自动通知. |
Client_AcKnowledge | 客户端自行决定通知时机 这种方式要求客户端使用javax.jms.Message.acknowledge()方法完成确认. |
Dups_OK_ACKnowledge | 延时//批量通知 这种确认方式允许JMS不必急于确认收到的消息,允许在收到多个消息之后一次完成确认,与Auto_AcKnowledge相比,这种确认方式在某些情况下可能更有效,因为没有确认,当系统崩溃或者网络出现故障的时候,消息可以被重新传递. |
二:JMS连接创建JMS会话的代码:
想回看下这段代码:
01 |
/** |
02 |
* @description 下面是要从服务器上获取连接工厂的JNDI和队列地址的JNDI. 然后就是发送信息到服务器端. |
03 |
* @param msg 消息的文本内容 |
04 |
* @param cfJNDI 连接工厂的JNDI |
05 |
* @param queueJNDI 队列的JNDI |
06 |
* @return 如果成功返回true. |
07 |
* @throws JMSException |
08 |
* @throws NamingException |
09 |
*/ |
10 |
private boolean getConnectFactory(String msg, String cfJNDI, String queueJNDI) throws JMSException, NamingException { |
11 |
Connection connection = null ; |
12 |
MessageProducer producer = null ; |
13 |
try { |
14 |
//初始化上下文 |
15 |
InitialContext ic = new InitialContext(); |
16 |
//JMS客户端使用JNDI 查找,定位 连接工厂 |
17 |
ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup(cfJNDI); |
18 |
//PTP模式,使用Queue.JMS客户端使用JNDI 查找,定位 Queue. |
19 |
Queue queue = (Queue) ic.lookup(queueJNDI); |
20 |
//通过连接工厂,获取 JMS连接. |
21 |
connection = connectionFactory.createConnection(); |
22 |
//通过JMS连接,获取到 JMS会话.后面的参数下章或下下章讲解. |
23 |
Session session = connection.createSession( false , Session.AUTO_ACKNOWLEDGE); |
24 |
//在JMS会话中,创建一个 JMS消息生产者. |
25 |
producer = session.createProducer(queue); |
26 |
//在JMS会话中,创建Text文本消息. |
27 |
TextMessage message = session.createTextMessage(); |
28 |
message.setText(msg); |
29 |
//发送到JMS目的. |
30 |
producer.send(message); |
31 |
//关闭JMS. |
32 |
this .close(connection, producer); |
33 |
} catch (JMSException e) { |
34 |
this .close(connection, producer); |
35 |
throw new JMSException(e.getMessage()); |
36 |
} catch (NamingException e) { |
37 |
this .close(connection, producer); |
38 |
throw new NamingException(e.getMessage()); |
39 |
} |
40 |
return true ; |
41 |
} |
42 |
43 |
private void close(Connection connection, MessageProducer producer) throws JMSException { |
44 |
try { |
45 |
if ( null != producer) { |
46 |
producer.close(); |
47 |
} |
48 |
if ( null != connection) { |
49 |
connection.close(); |
50 |
} |
51 |
} catch (JMSException e) { |
52 |
throw new JMSException(e.getMessage()); |
53 |
} |
54 |
} |
1 |
//通过JMS连接,获取到 JMS会话.后面的参数下章或下下章讲解. |
2 |
Session session = connection.createSession( false , Session.AUTO_ACKNOWLEDGE); |
上面这句是重点,这段代码是创建Session时调用了Connection的方法,第一个false参数,是表明会话是否具有事务性.如果是false,必须指定确认方式.