ActiveMQ 设计开发(Topic模式)

package com.jshx.cc.topic;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MapMessage;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.jshx.cc.common.btnpermission.BeanProvider;
import com.jshx.cc.groupChatContent.entity.Tgroupchatcontent;
import com.jshx.cc.groupChatContent.service.TgroupchatcontentService;
import com.jshx.module.admin.entity.User;
import com.jshx.module.admin.service.UserService;

/**
* 即时通信息发送方topic模式
* @author
*
*/
public class ActivemqSender extends HttpServlet{

private static final String user = ActiveMQConnection.DEFAULT_USER;
private static final String password = ActiveMQConnection.DEFAULT_PASSWORD;
private static final String url = "tcp://localhost:61616";
//private static final String topicName = "secondQueue";

@Autowired
private UserService userService;

@Autowired
private TgroupchatcontentService contentService;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
    ActiveMQConnectionFactory connectionFactory;
        Connection connection;
        Session session;
        MessageProducer producer;
        connectionFactory = new ActiveMQConnectionFactory(user,password,url);
       
        userService = BeanProvider.getBean("userService");//获取userService对象   
       
        contentService = BeanProvider.getBean("tgroupchatcontentService");
        try {
            String chatcontent = request.getParameter("chatContent"); // 聊天内容
            String senderid = request.getParameter("senderId"); // 发送人ID 
            String topicName = request.getParameter("topicName");  // 群组ID
            String loginUserId = senderid; // 当前登录人ID
           
            connection = connectionFactory.createConnection();
            connection.start();
            session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE); // 设置自动接收消息
            Topic topic = session.createTopic(topicName);
            producer = session.createProducer(topic);
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);// 设置持久化
           
            User user = userService.findUserById(loginUserId);
            SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
            String date = sf.format(new Date());
           
            MapMessage message = session.createMapMessage();
            String chatcontent1 = user.getDisplayName() + "&nbsp;&nbsp;" + date + "<br>" + chatcontent + "<br>";
            message.setStringProperty("chatcontent", chatcontent1);
            message.setStringProperty("senderid", senderid);
            message.setStringProperty("groupid", topicName);
            message.setStringProperty("loginUserId", loginUserId);
           
            if(user != null){
            message.setStringProperty("LoginUserName", user.getDisplayName());//保存发送人的姓名
            message.setStringProperty("LoginId", user.getLoginId());//保存发送人的登录名
            }
           
            // 发送消息到目的地方
            Thread.sleep(1000);
            producer.send(message);
            System.out.println(user.getDisplayName()+"--发送消息的内容是");
            System.out.println(chatcontent);
           
            // 消息入库
            Tgroupchatcontent tgroupchat = new Tgroupchatcontent();
            tgroupchat.setChatcontent(chatcontent);
            tgroupchat.setSenderid(senderid);
            tgroupchat.setGroupid(topicName);
            tgroupchat.setCreateTime(new Date());
            tgroupchat.setUpdateTime(new Date());
            tgroupchat.setCreateUserID(loginUserId);
            tgroupchat.setUpdateUserID(loginUserId);
            tgroupchat.setDelFlag(0);
            contentService.save(tgroupchat);
           
            session.commit();
            session.close();
            connection.close();
           
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        processRequest(request, response); 
    }  
 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        processRequest(request, response); 
    }
}

package com.jshx.cc.topic;

/**
* 即时通信消息接受方topic模式
* @author
*/
import java.io.IOException;
import java.io.PrintWriter;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.Topic;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class ActivemqReceiver extends HttpServlet{

private static final String user = ActiveMQConnection.DEFAULT_USER;
private static final String password = ActiveMQConnection.DEFAULT_PASSWORD;
private static final String url = "tcp://localhost:61616";
// private static final String topicName = "secondQueue"; // 先写死,当多个群组队列出现 需要修改

protected void processResponse(HttpServletRequest request, HttpServletResponse response) {

// String loginUserId = request.getParameter("sendUserId"); // 当前登录用户ID
String topicName = request.getParameter("topicName");  // 群组ID
String senderId = request.getParameter("senderId"); // 发送人ID
String clientID = topicName + senderId;
ActiveMQConnectionFactory connectionFactory;
        Connection connection = null;
        Session session = null;
        MessageConsumer consumer;
        connectionFactory = new ActiveMQConnectionFactory(user,password,url);
        try {
        final PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset=UTF-8");
        response.setContentType("text/html"); 
            response.setHeader("Cache-Control", "no-store"); 
            response.setHeader("Pragma", "no-cache"); 
            response.setDateHeader("Expires", 0);
            connection = connectionFactory.createConnection();
            connection.setClientID(clientID); //持久订阅需要设置
            connection.start();
            session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
            Topic topic = session.createTopic(topicName);
            consumer = session.createDurableSubscriber(topic,clientID);
            consumer.setMessageListener(new MessageListener(){
public void onMessage(Message msg){
if(msg != null){
MapMessage message = (MapMessage)msg;
try{
System.out.println("---收到消息--->"+message.getStringProperty("chatcontent"));
out.write(message.getStringProperty("chatcontent"));
}catch(JMSException e){
e.printStackTrace();
}
}
}
});
            // 休眠5秒
            Thread.sleep(1000 * 1);
            // 提交会话
            session.commit();
            System.out.println("结束.....");
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
try {
            if (session != null) {
                session.close();
            }
            if (connection != null) {
                connection.close();
            }
} catch (JMSException e) {
e.printStackTrace();
}
}
    }

@Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
processResponse(request, response); 
    }  
 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    processResponse(request, response); 
    }
}

你可能感兴趣的:(servlet,activemq,jms)