Mina+Config(分布式配置)+Hystrix(线程隔离)+Eureka(服务注册和调用)+Zuul(权限控制)的架构:
package com.cloud.mina.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.cloud.mina.component.filter.ComponentIOFilter;
import com.cloud.mina.component.filter.MHRootComponent;
import com.cloud.mina.component.filter.MilinkBPComponent;
import com.cloud.mina.component.filter.MilinkSportComponent;
import com.cloud.mina.component.milink.bp.BPNo1LoginParer;
import com.cloud.mina.component.milink.bp.BPNo4SynsTimeParer;
import com.cloud.mina.component.milink.bp.BPNo8DataParer;
import com.cloud.mina.component.milink.sport.No8OneWayParser;
import com.cloud.mina.component.milink.sport.No8ThreeWayParser;
import com.cloud.mina.component.milink.sport.No8TwoWayParser;
import com.cloud.mina.component.milink.sport.SportLoginParser;
import com.cloud.mina.component.milink.sport.SportLogoutParser;
import com.cloud.mina.milink.strategy.StrategyFactroyHandler;
public class MinaServer {
private static Logger log = Logger.getLogger(MinaServer.class);
public static void main(String[] args) throws IOException
{
- 线程隔离
IoAcceptor sportAcceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors()+1);
IoAcceptor BPacceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors()+1);
- 构建业务树,实现可扩展
MilinkSportComponent milinkSportsComponent = new MilinkSportComponent();
milinkSportsComponent.add(new SportLoginParser());
milinkSportsComponent.add(new No8OneWayParser());
milinkSportsComponent.add(new SportLogoutParser());
milinkSportsComponent.add(new No8TwoWayParser());
milinkSportsComponent.add(new No8ThreeWayParser());
MilinkBPComponent milinkBPComponent = new MilinkBPComponent();
milinkBPComponent.add(new BPNo1LoginParer());
milinkBPComponent.add(new BPNo4SynsTimeParer());
milinkBPComponent.add(new BPNo8DataParer());
MHRootComponent compent=new MHRootComponent();
compent.add(milinkSportsComponent);
compent.add(milinkBPComponent);
//在解码器链上 添加解码器
sportAcceptor.getFilterChain().addLast("milinkSportsComponent", new ComponentIOFilter(milinkSportsComponent));
BPacceptor.getFilterChain().addLast("milinkBPComponent", new ComponentIOFilter(milinkBPComponent));
//业务逻辑处理线程池
acceptor.getFilterChain().addLast("executors", new ExecutorFilter());
//若30s无读写操作 则session进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,40);
//设置业务处理逻辑
acceptor.setHandler(new StrategyFactroyHandler());
acceptor.bind(new InetSocketAddress(8888));
log.info("Server is running...listening port 8889...");
}
}