微服务调度中心升级xxl-job及xxl-job改造(二)

因前面文章《微服务调度中心升级xxl-job及xxl-job改造》介绍的不是很详细,这里再补充一下。

为了解决执行器端也就是业务端需要单独开一个netty的nio服务端口,仅仅是为了几首xxl-admin 端发送到业务端的调度任务这个场景,让人头疼,所以对源码进行修改,采用http来直接调用服务即可。

其中对源码进行了如下修改:

1、XxlJobExecutor.java中的initEmbedServer(address, ip, port, appname, accessToken);进行了修改。

 // 开启netty-server -->替换成web http请求方式。
    private void initEmbedServer(String address, String ip, int port, String appname, String accessToken) throws Exception {

        // fill ip port
//        port = port>0?port: NetUtil.findAvailablePort(9999);
        ip = (ip!=null&&ip.trim().length()>0)?ip: IpUtil.getIp();

        // generate address
        if (address==null || address.trim().length()==0) {
            // registry-address:default use address to registry , otherwise use ip:port if address is null
            String ip_port_address = IpUtil.getIpPort(ip, port);
            address = "http://{ip_port}/".replace("{ip_port}", ip_port_address);
        }

        // accessToken
        if (accessToken==null || accessToken.trim().length()==0) {
            logger.warn(">>>>>>>>>>> xxl-job accessToken is empty. To ensure system security, please set the accessToken.");
        }

        // start
        embedServer = new EmbedServer();
        embedServer.start(address, port, appname, accessToken);
    }

2、EmbedServer.java 进行了修改。

package com.xxl.job.core.server;

import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.impl.ExecutorBizImpl;
import com.xxl.job.core.biz.model.*;
import com.xxl.job.core.thread.ExecutorRegistryThread;
import com.xxl.job.core.util.GsonTool;
import com.xxl.job.core.util.ThrowableUtil;
import com.xxl.job.core.util.XxlJobRemotingUtil;
//import io.netty.bootstrap.ServerBootstrap;
//import io.netty.buffer.Unpooled;
//import io.netty.channel.*;
//import io.netty.channel.nio.NioEventLoopGroup;
//import io.netty.channel.socket.SocketChannel;
//import io.netty.channel.socket.nio.NioServerSocketChannel;
//import io.netty.handler.codec.http.*;
//import io.netty.handler.timeout.IdleStateEvent;
//import io.netty.handler.timeout.IdleStateHandler;
//import io.netty.util.CharsetUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.*;

/**
 * Copy from : https://github.com/xuxueli/xxl-rpc
 *
 * @author xuxueli 2020-04-11 21:25
 */
public class EmbedServer {
    private static final Logger logger = LoggerFactory.getLogger(EmbedServer.class);

    public void start(final String address, final int port, final String appname, final String accessToken){
        // start registry
        startRegistry(appname, address,accessToken);
    }

    public void stop() throws Exception {
        // stop registry
        stopRegistry();
        logger.info(">>>>>>>>>>> xxl-job remoting server destroy success.");
    }

    
    // ---------------------- registry ----------------------

    public void startRegistry(final String appname, final String address,final String accessToken) {
        // start registry
        ExecutorRegistryThread.getInstance().start(appname, address);
    }

    public void stopRegistry() {
        // stop registry
        ExecutorRegistryThread.getInstance().toStop();
    }

}

主要是执行器不再通过netty来启动,直接使用http来访问即可。

中心   xxl
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章