(一):群发的概念:例如广播的形式,只有在同一时间在同一个频道的人能够收到消息,其他的都不会收到消息
(二):JMS即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
(三):组成元素
a:JMS提供者 连接面向消息中间件的,JMS接口的一个实现,提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器.
b:JMS客户 生产或消费基于消息的Java的应用程序或对象
c:JMS生产者/JMS消费者 创建并发送(接收)消息的JMS客户。
d:JMS消息 包括可以在JMS客户之间传递的数据的对象
e:JMS队列 一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同 一旦一个消息被阅读,该消息将被从队列中移走。
f:JMS主题 一种支持发送消息给多个订阅者的机制
(四):一张帮助理解的图片
(五):需要用到的jar包有
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.11.2</version>
</dependency>
(六):两种模式:点对点和广播模式
package com.qf.jms.test;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTextMessage;
import org.junit.Test;
public class Expérimenter {
/**
* 点对点模型
*/
// connection用于程序和服务器之间建立连接通信用
// Destination目标,包含消息发布和目标
// MessageConsumer消费者
// MessageProducer生产者
// Message消息对象
// Session会话接口,用于接收和发送消息
/**
* 当消息发送完毕,对方接受到以后,会自动将消息删除
*
* @throws Exception
*/
/**
* activemq怎样保证消息不丢失,内部有应答系统,当发送给服务器的时候,一段时间服务器会给发送者一个响应,同理
* 当服务器发给接受者的时候也会有一个响应,这样保证了消息的不丢失
*/
@Test
public void Test1() throws Exception {
// 这是一个发送方
// 1创建连接
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.0.135.131:61616");
// 2打开连接
Connection connection = connectionFactory.createConnection();
connection.start();
// 3创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4创建一个生产者,设置具体发送的内容
Queue queue = session.createQueue("woyaofaxiaoxi");
MessageProducer producer = session.createProducer(queue);
// 5创建一个生产者
TextMessage textMessage = new ActiveMQTextMessage();
textMessage.setText("我真的想要发送一个消息给你");
// 6设置发送的内容
producer.send(textMessage);
// 7将内容发送出去
producer.close();
session.close();
connection.close();
// 8关闭资源
}
@Test
public void Test2() throws Exception {
// 这是点对点的接收方
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.0.135.131:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
// 创建消息是否需要等待对方回复,如果为true,则需要等待对方答复,则程序处于阻塞状态
// 当设置为true的时候,第二个参数将会失去意义
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("woyaofaxiaoxi");
// 发送者发送到服务器的消息,依靠这个参数传送给接收方
MessageConsumer consumer = session.createConsumer(queue);
// 设置一个监听器,实现为实现的方法
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
// 做一个子父类型的强转
String string = textMessage.getText();
System.out.println(string);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
System.in.read();
// 作用:阻塞程序的结束,可以时刻接收到服务端发送过来的消息
}
/**
* 这是一种广播模式,多个消费者可以获取消息
*
*/
// 注意:广播模式会存在消息的丢失
@Test
public void Test3() throws Exception {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.0.135.131:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建搬运工.广播模式 发布者/订阅者模式
Topic topic = session.createTopic("131415");
MessageProducer producer = session.createProducer(topic);
TextMessage textMessage = new ActiveMQTextMessage();
textMessage.setText("这真的是一个广播模式");
producer.send(textMessage);
producer.close();
session.close();
connection.close();
}
@Test
public void Test4() throws Exception {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.0.135.131:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("131415");
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
String string = textMessage.getText();
System.out.println(string);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
System.in.read();
}
}
589

被折叠的 条评论
为什么被折叠?



