/**
* 包装连接和消息列表的内部类
*
*/
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);