Files
elink-online-common/src/main/java/com/eactive/eai/flowcontrol/jeus/QueueConsumerService.java
T
Rinjae aacc1a389e init
2025-09-05 18:57:45 +09:00

104 lines
2.3 KiB
Java

package com.eactive.eai.flowcontrol.jeus;
import com.eactive.eai.common.util.Logger;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import javax.jms.Connection;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.naming.InitialContext;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class QueueConsumerService implements InitializingBean, DisposableBean {
private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
private String uri;
private String queue;
private int maxThread;
Connection connection = null;
Session[] sessions = null;
DefaultQueueConsumer[] consumers = null;
public final static String JNDI_FACTORY = "";
ExecutorService es = null;
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getQueue() {
return queue;
}
public void setQueue(String queue) {
this.queue = queue;
}
public int getMaxThread() {
return maxThread;
}
public void setMaxThread(int maxThread) {
this.maxThread = maxThread;
}
@Override
public void afterPropertiesSet() throws Exception {
startConsumer();
}
@Override
public void destroy() throws Exception {
stopConsumer();
}
public void startConsumer() {
try {
InitialContext ctx = new InitialContext();
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx.lookup(uri);
es = Executors.newFixedThreadPool(maxThread);
connection = connectionFactory.createConnection();
connection.start();
consumers = new DefaultQueueConsumer[maxThread];
for(int i=0; i<maxThread; i++) {
DefaultQueueConsumer consumer = new DefaultQueueConsumer("JEUSJMS-" +i, connection, queue);
es.submit(consumer);
consumers[i] = consumer;
}
logger.info("Start JEUS JMS QueueListener [ uri=" + uri +
", queue="+queue + ", maxthread=" + maxThread+"] and wait for listening");
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public void stopConsumer() {
for(int i=0; i<maxThread; i++) {
try {
consumers[i].stop();
} catch (Exception e) {
logger.warn(e.getMessage());
}
}
if(es != null) {
es.shutdown();
}
es = null;
}
}