|
|
|
|
package weaver.interfaces.dito.mq;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
|
|
|
|
|
import org.apache.rocketmq.client.exception.MQClientException;
|
|
|
|
|
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
|
|
|
|
|
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
|
|
|
|
|
import weaver.file.Prop;
|
|
|
|
|
import weaver.general.BaseBean;
|
|
|
|
|
import weaver.general.GCONST;
|
|
|
|
|
import weaver.general.InitServer;
|
|
|
|
|
import weaver.interfaces.dito.comInfo.PropBean;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class RocketmqServlet extends HttpServlet {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean isMainIp = false;//是否为主节点
|
|
|
|
|
|
|
|
|
|
private boolean isSampleMode = false;//是否为单机(启用ridis并且配置了主节点的,则不是单机,否则认为是集群环境)
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void init() throws ServletException
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
BaseBean bb = new BaseBean();
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
|
|
|
|
|
|
|
bb.writeLog("initiated---进入时间:"+sdf.format(new Date()));
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
|
|
|
|
|
try{
|
|
|
|
|
isMainIp = isMainIp();//计算是否为集群中的主节点
|
|
|
|
|
isSampleMode = isSampleMode();//判断是否为单机
|
|
|
|
|
bb.writeLog("isMainIp:"+isMainIp);
|
|
|
|
|
bb.writeLog("isSampleMode:"+isSampleMode);
|
|
|
|
|
|
|
|
|
|
if(isSampleMode){
|
|
|
|
|
initData();
|
|
|
|
|
}else{
|
|
|
|
|
if (isMainIp) {
|
|
|
|
|
//则调用service方法加载设置,重新获取workflowid相关超时设置OvertimeEntity
|
|
|
|
|
initData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("portal-producer-group_nj");
|
|
|
|
|
//DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("cbec-consumer-group_nj_133");
|
|
|
|
|
//consumer.setNamesrvAddr("172.16.84.183:9001;172.16.84.187:9001");
|
|
|
|
|
// consumer.subscribe("dataSync_topic_nj", "BPM");
|
|
|
|
|
// consumer.setInstanceName("dataSync_topic_nj");
|
|
|
|
|
|
|
|
|
|
// String consumerGroup = PropBean.getUfPropValue("consumerGroup");
|
|
|
|
|
// bb.writeLog("consumerGroup:"+consumerGroup);
|
|
|
|
|
// DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
|
|
|
|
|
//
|
|
|
|
|
// String namesrvAddr = PropBean.getUfPropValue("namesrvAddr");
|
|
|
|
|
// bb.writeLog("namesrvAddr:"+namesrvAddr);
|
|
|
|
|
// consumer.setNamesrvAddr(namesrvAddr);
|
|
|
|
|
//
|
|
|
|
|
// String instanceName = PropBean.getUfPropValue("instanceName");
|
|
|
|
|
// bb.writeLog("instanceName:"+instanceName);
|
|
|
|
|
// consumer.setInstanceName(instanceName);
|
|
|
|
|
// consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
|
|
|
|
|
// //consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
|
|
|
|
|
//
|
|
|
|
|
// String topic = PropBean.getUfPropValue("topic");
|
|
|
|
|
// String subExpression = PropBean.getUfPropValue("subExpression");
|
|
|
|
|
//
|
|
|
|
|
// bb.writeLog("topic:"+topic);
|
|
|
|
|
// bb.writeLog("subExpression:"+subExpression);
|
|
|
|
|
//
|
|
|
|
|
// consumer.subscribe(topic,subExpression);
|
|
|
|
|
// consumer.setConsumeThreadMin(1);
|
|
|
|
|
// consumer.setConsumeThreadMax(1);
|
|
|
|
|
// consumer.setConsumeMessageBatchMaxSize(1);
|
|
|
|
|
// consumer.setMessageModel(MessageModel.BROADCASTING);
|
|
|
|
|
// consumer.registerMessageListener(new RocketMsgListener());
|
|
|
|
|
// consumer.registerMessageListener(new RocketMsgOrderListener());
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Consumer对象在使用之前必须要调用start初始化,初始化一次即可<br>
|
|
|
|
|
*/
|
|
|
|
|
// consumer.start();
|
|
|
|
|
// bb.writeLog("Consumer Started.");
|
|
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
bb.writeLog("Consumer resource model initiated--MQClientException:"+e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
bb.writeLog("***** resource model initiated");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void initData(){
|
|
|
|
|
BaseBean bb = new BaseBean();
|
|
|
|
|
PropBean propBean = new PropBean();
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
String consumerGroup = propBean.getUfPropValueStatic("consumerGroup");
|
|
|
|
|
bb.writeLog("consumerGroup:" + consumerGroup);
|
|
|
|
|
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup);
|
|
|
|
|
String namesrvAddr = propBean.getUfPropValueStatic("namesrvAddr");
|
|
|
|
|
bb.writeLog("namesrvAddr:" + namesrvAddr);
|
|
|
|
|
consumer.setNamesrvAddr(namesrvAddr);
|
|
|
|
|
String instanceName = propBean.getUfPropValueStatic("instanceName");
|
|
|
|
|
bb.writeLog("instanceName:" + instanceName);
|
|
|
|
|
consumer.setInstanceName(instanceName);
|
|
|
|
|
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
|
|
|
|
|
String topic = propBean.getUfPropValueStatic("topic");
|
|
|
|
|
String subExpression = propBean.getUfPropValueStatic("subExpression");
|
|
|
|
|
bb.writeLog("topic:" + topic);
|
|
|
|
|
bb.writeLog("subExpression:" + subExpression);
|
|
|
|
|
String authid = propBean.getUfPropValueStatic("authid");
|
|
|
|
|
String authpwd = propBean.getUfPropValueStatic("authpwd");
|
|
|
|
|
String clustername = propBean.getUfPropValueStatic("clustername");
|
|
|
|
|
String tenantid = propBean.getUfPropValueStatic("tenantid");
|
|
|
|
|
bb.writeLog("authid:" + authid);
|
|
|
|
|
bb.writeLog("authpwd:" + authpwd);
|
|
|
|
|
bb.writeLog("clustername:" + clustername);
|
|
|
|
|
bb.writeLog("tenantid:" + tenantid);
|
|
|
|
|
consumer.subscribe(topic, subExpression);
|
|
|
|
|
consumer.setAuthID(authid);
|
|
|
|
|
consumer.setAuthPWD(authpwd);
|
|
|
|
|
consumer.setClusterName(clustername);
|
|
|
|
|
consumer.setTenantID(tenantid);
|
|
|
|
|
|
|
|
|
|
consumer.setConsumeThreadMin(1);
|
|
|
|
|
consumer.setConsumeThreadMax(1);
|
|
|
|
|
consumer.setConsumeMessageBatchMaxSize(1);
|
|
|
|
|
|
|
|
|
|
consumer.setMessageModel(MessageModel.BROADCASTING);
|
|
|
|
|
consumer.registerMessageListener(new RocketMsgListener());
|
|
|
|
|
consumer.start();
|
|
|
|
|
bb.writeLog("Consumer66Started.");
|
|
|
|
|
} catch (MQClientException var13) {
|
|
|
|
|
bb.writeLog("Consumer resource model initiated--MQClientException:" + var13);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 实现 HttpServlet 的 doGet 方法,不作任何操作
|
|
|
|
|
* @param request
|
|
|
|
|
* @param response
|
|
|
|
|
* @throws ServletException
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
doPost(request, response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 实现 HttpServlet 的 doPost 方法,不作任何操作
|
|
|
|
|
* @param request
|
|
|
|
|
* @param response
|
|
|
|
|
* @throws ServletException
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void destroy()
|
|
|
|
|
{
|
|
|
|
|
// 什么也不做
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean isMainIp() {
|
|
|
|
|
new BaseBean().writeLog("超时判断主节点");
|
|
|
|
|
String mainControlIp = "";
|
|
|
|
|
ArrayList<String> hostIps = new InitServer().getRealIp();
|
|
|
|
|
Prop prop = Prop.getInstance();
|
|
|
|
|
mainControlIp = prop.getPropValue(GCONST.getConfigFile(), "MainControlIP");
|
|
|
|
|
if (hostIps == null || hostIps.size() == 0) {
|
|
|
|
|
new BaseBean().writeLog("System Init Error:Cannot get local Ip address,This may cause scripts or Timed task not run! ");
|
|
|
|
|
} else {
|
|
|
|
|
new BaseBean().writeLog("System Init Message:mainControlIp=" + mainControlIp + " localIp:" + hostIps.toString());
|
|
|
|
|
}
|
|
|
|
|
if ((!"".equals(mainControlIp) && hostIps.contains(mainControlIp)) || "".equals(mainControlIp)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public boolean isSampleMode() {
|
|
|
|
|
BaseBean base = new BaseBean();
|
|
|
|
|
boolean redis_flag = "1".equals(base.getPropValue("weaver_new_session", "status"));
|
|
|
|
|
boolean mainIp_flag = !"".equals(base.getPropValue("weaver", "MainControlIP"));
|
|
|
|
|
base.writeLog("超时判断是否为集群环境:redis_flag======"+redis_flag);
|
|
|
|
|
base.writeLog("超时判断是否为集群环境:mainIp_flag======="+mainIp_flag);
|
|
|
|
|
return !(redis_flag && mainIp_flag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|