`
gtgt1988
  • 浏览: 111641 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

JMS--activeMQ--广播模式

 
阅读更多

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

相关推荐

Global site tag (gtag.js) - Google Analytics