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);
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值