一、初始化连接工具
import javax.jms.JMSException;
import com.hegao.pdos.core.uitle.activeMQ.ActiveMQ;
import com.hegao.pdos.core.uitle.activeMQ.JmsReceiver;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.pool.PooledConnection;
import org.apache.activemq.pool.PooledConnectionFactory;
import com.jfinal.plugin.IPlugin;
public class ActiveMQPlugin implements IPlugin {
public static final String BROKER_URL = "tcp://localhost:61616";
public static final String QUEUE_NAME = "sendMail";
@Override
public boolean start() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setUserName(ActiveMQConnection.DEFAULT_USER);
activeMQConnectionFactory.setPassword(ActiveMQConnection.DEFAULT_PASSWORD);
activeMQConnectionFactory.setBrokerURL(BROKER_URL);
activeMQConnectionFactory.setDispatchAsync(true);
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(activeMQConnectionFactory);
pooledConnectionFactory.setMaximumActiveSessionPerConnection(200);
pooledConnectionFactory.setIdleTimeout(120);
pooledConnectionFactory.setMaxConnections(5);
pooledConnectionFactory.setBlockIfSessionPoolIsFull(true);
try {
PooledConnection connection = (PooledConnection) pooledConnectionFactory.createConnection();
connection.start();
ActiveMQ.pooledConnectionMap.put(QUEUE_NAME, connection);
new JmsReceiver(connection, QUEUE_NAME);
} catch (JMSException e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean stop() {
return true;
}
}
二、ActiveMQ工具类
import java.util.concurrent.ConcurrentHashMap;
import org.apache.activemq.pool.PooledConnection;
public class ActiveMQ {
public static final ConcurrentHashMap<String, PooledConnection> pooledConnectionMap = new ConcurrentHashMap<>();
public static void addConnection(String connectionName, PooledConnection connection) {
pooledConnectionMap.put(connectionName, connection);
}
public static PooledConnection getConnection(String connectionName) {
return pooledConnectionMap.get(connectionName);
}
}
三、生产者
import javax.jms.*;
import org.apache.activemq.pool.PooledConnection;
public class JmsSender {
private Session session;
private MessageProducer producer;
public JmsSender(PooledConnection connection, String subject) throws JMSException {
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(subject);
producer = session.createProducer(queue);
}
public Session getSession() {
return session;
}
public void sendMessage(Message message) throws JMSException {
producer.send(message);
}
}
四、消费者
import javax.jms.*;
import org.apache.activemq.pool.PooledConnection;
public class JmsReceiver implements MessageListener {
public JmsReceiver(PooledConnection connection, String subject) throws JMSException {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(subject);
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(this);
}
@Override
public void onMessage(Message message) {
System.out.println(message);
if (message != null && message instanceof MapMessage) {
MapMessage msg = (MapMessage) message;
String nickName = null;
String opinions = null;
try {
nickName = msg.getString("nickName");
opinions = msg.getString("opinions");
System.out.println(nickName);
System.out.println(opinions);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
五、Jfinal 插件配置
@Override
public void configPlugin(Plugins me) {
me.add(new ActiveMQPlugin());
}
六、接口调用测试
public void testSend2() throws JMSException {
JmsSender sender = new JmsSender(ActiveMQ.getConnection("sendMail"), ActiveMQPlugin.QUEUE_NAME);
MapMessage mapMessage = sender.getSession().createMapMessage();
mapMessage.setString("nickName","123");
mapMessage.setString("opinions", "456");
sender.sendMessage(mapMessage);
rendJson("成功");
}
七、结果展示
"nickName":"123"
"opinions":"456"