/**
* 包装连接和消息列表的内部类
*
*/
private class GroupChat{
private TopicSession session = null;
private List<GroupMessage> messages = new ArrayList<GroupMessage>();
public TopicSession getSession() {
return session;
}
public void setSession(TopicSession session) {
this.session = session;
}
public List<GroupMessage> getMessages() {
return messages;
}
}
import java.io.Serializable;
import java.util.Date;
群消息类
public class GroupMessage implements Serializable {
private static final long serialVersionUID = 8933293907620444570L;
double id = 0.0;
int groupId = 0;
int userId = 0;
String userName = "";
String body = "";
Date sendDate = null;
public GroupMessage(){
id = Math.random();
}
public double getId() {
return id;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Date getSendDate() {
return sendDate;
}
public void setSendDate(Date sendDate) {
this.sendDate = sendDate;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
}
群聊发送消息 跟点对点模式差不多
大致代码如下
TopicConnection topicConnection = connectionFactory.createTopicConnection();
TopicSession session = topicConnection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(String.valueOf(gid));
TopicPublisher publisher = session.createPublisher(topic);
publisher.setDeliveryMode(DeliveryMode.PERSISTENT);
publisher.setTimeToLive(3*24*60*60*1000);
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setObject(message);
publisher.publish(objectMessage);
topicConnection.close();
群聊接收消息 跟点对点模式差不多
大致代码如下
TopicSession topicSession = topicConnection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
Topic topic = topicSession.createTopic(String.valueOf(gid));
TopicSubscriber topicSubscriber = topicSession.createDurableSubscriber(topic, String.valueOf(uid)+"-"+String.valueOf(gid));
topicSubscriber.setMessageListener(new MessageListener() {
public void onMessage(javax.jms.Message message) {
logger.info("接收到消息类型:"+message.getClass());
if(message instanceof ObjectMessage){
if(messageMap.containsKey(gid)){
try {
ObjectMessage objectMessage = (ObjectMessage)message;
GroupMessage groupMessage = (GroupMessage) objectMessage.getObject();
logger.info(groupMessage.getBody());
messageMap.get(gid).getMessages().add(groupMessage);
objectMessage.acknowledge();
} catch (JMSException e) {
logger.error(e.getMessage(), e);
}
}
}
}
});
GroupChat groupChat = new GroupChat();
groupChat.setSession(topicSession);
messageMap.put(gid, groupChat);
分享到:
相关推荐
ActiveMQ作为JMS的实现,支持多种消息模式,包括点对点(Queue)和发布/订阅(Topic)。 点对点模式下,每个消息只有一个消费者,适合一对一的通信场景;而在发布/订阅模式中,一个消息可以被多个消费者接收,适用...
描述中提到,“jms测试程序,将tomcat和activeMq整合在一起做的一个发送接受的发布订阅的例子”,这表明项目是基于Tomcat服务器,并且通过ActiveMQ实现了一个发布/订阅模式的消息传递。Tomcat是一个流行的Java应用...
4. 事务支持:ActiveMQ支持JMS事务,保证消息的可靠投递和原子性操作。 5. 多种协议支持:除了Java API,ActiveMQ还支持AMQP、STOMP、XMPP等多种网络协议,方便跨平台和语言的集成。 三、源码剖析 1. 代码结构:...
本篇文章将围绕"ActiveMQ 中javax.jms的源码 javax.jms-sources-1.1.zip"展开,详细剖析其关键概念、设计模式以及源码实现。 首先,javax.jms是一个Java API,它提供了一组与消息传递平台无关的接口,使得开发者...
这篇博客"jms之activeMQ 队列和广播模式例子"主要面向初学者,旨在提供ActiveMQ入门级的知识,通过实例解释队列(Queue)和主题(Topic)这两种基本的消息模式。 首先,我们要理解JMS中的队列和主题的区别。队列...
**ActiveMQ** 是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,提供了多种协议的支持,如AMQP、STOMP、MQTT等。ActiveMQ因其高效、稳定和易用的特点,被广泛应用在企业级的消息传递系统中。 本入门...
2. **消息模式**:ActiveMQ支持多种消息模式,如点对点(Queue)、发布/订阅(Topic)、请求/响应(Request/Reply)等,以满足不同应用场景的需求。 3. **高级路由和过滤**:ActiveMQ提供了多种消息路由策略,如...
Topic适用于广播模式,而Queue则遵循FIFO(先进先出)原则。 3. **JMS支持**:ActiveMQ完全符合JMS 1.1规范,支持Message Queue、Topic、Temporary Queue和Temporary Topic四种类型。用户可以通过JMS API创建连接、...
ActiveMQ是Apache软件基金会开发的一款开源的消息中间件,它支持多种消息协议,如AMQP、JMS等,广泛应用于Java开发环境中。SpringBoot以其简洁的配置和快速的应用开发能力,成为Java开发者首选的微服务框架。本篇...
Apache ActiveMQ是业界广泛使用的开源消息中间件,它遵循Java Message Service (JMS) 规范,提供高效、可靠的异步消息传递服务。这个压缩包"apache-activemq-5.14.4-bin.tar.gz"包含了安装和运行ActiveMQ所需的所有...
Apache ActiveMQ是世界上最流行的开源消息代理和队列服务器,它基于Java Message Service(JMS)规范,用于在分布式系统中实现可靠的消息传递。这个压缩包"apache-activemq-5.15.3-bin"包含了ActiveMQ的可执行版本,...
- Apache ActiveMQ 是一个开源的消息中间件,遵循JMS(Java消息服务)规范,提供消息传递服务,支持多种协议,如AMQP、STOMP等。 - 它允许分布式系统中的组件异步通信,通过解耦生产者和消费者,提高系统的响应...
1. 创建JMS连接工厂:这是连接JMS提供者的桥梁,如ActiveMQ、RabbitMQ等。 2. 创建连接:通过连接工厂建立到JMS提供者的连接。 3. 创建会话:会话是执行JMS操作的上下文,可以设置事务管理、是否接收确认等属性。 4....
Apache ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它基于Java Message Service (JMS) 规范,提供高效、可靠的消息传递服务。在“apache-activemq-5.12.0-bin”这个压缩包中,包含了运行Apache ActiveMQ...
- Topic是广播模式,消息会被所有订阅者接收,适合一对多通信。 7. **ActiveMQ的安全性** - 可以配置用户和角色,限制对资源的访问。 - 使用SSL/TLS加密网络通信,确保数据传输安全。 8. **监控和日志** - ...
- **发布/订阅模式(Topic)**:支持一对多的消息广播,多个消费者可以订阅同一个主题。 - **持久化**:ActiveMQ可以将消息持久化到磁盘,即使服务器重启也能恢复未处理的消息。 - **事务支持**:允许在消息发送和...
- **队列与主题**:ActiveMQ支持两种消息模式——点对点(Queue)和发布/订阅(Topic)。队列保证消息的顺序传递,而主题则允许广播式的消息分发。 2. **ActiveMQ功能**: - **高可用性**:通过集群和复制策略,...
7. **消息类型**:ActiveMQ支持多种消息类型,包括点对点(Queue)和发布/订阅(Topic)模式。Queue用于一对一通信,而Topic用于一对多广播式通信。 8. **高可用性和集群**:ActiveMQ支持集群和故障转移,可以创建...
1. **JMS支持**:ActiveMQ完全遵循JMS 1.1规范,提供了多种消息模式,如点对点、发布/订阅,以及事务和持久化机制。 2. **多协议支持**:ActiveMQ不仅支持OpenWire,还支持STOMP、AMQP、MQTT、WS和HTTP等多种消息...