• 分布式websocket服务器


    参考:https://zhuanlan.zhihu.com/p/48490362

    问题:MQ队列的要求是:不同的服务对应不同的MQ队列。

    解决的方法1:获取服务的IP地址,用于区分:

    /**
    * 获取本机的局域网ip地址,兼容Linux
    */
    public static String getLocalHostIP() {
    String localHostAddress = "";
    try {
    Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
    while (allNetInterfaces.hasMoreElements()) {
    NetworkInterface networkInterface = allNetInterfaces.nextElement();
    Enumeration<InetAddress> address = networkInterface.getInetAddresses();
    while (address.hasMoreElements()) {
    InetAddress inetAddress = address.nextElement();

    if (inetAddress != null && inetAddress instanceof Inet4Address && !inetAddress.getHostAddress().startsWith("127.0")) {
    localHostAddress = inetAddress.getHostAddress();
    }
    }
    }
    } catch (Exception ex) {
    log.error(ex.getMessage());
    localHostAddress = String.valueOf(new Random().nextInt(10000));
    }
    return localHostAddress;
    }

    解决方法2: 记录在redis启动的队列,有效期设置为120S。
    @Slf4j
    @Service
    public class TestConfig {
    @Autowired
    private IRedisService redisService;

    public static String socketMqKey = null;

    public String getUniqueKey(){
    String key = "activity.websocket.queue_";
    for(int i = 0;i < 20;i++) {
    Boolean lock = redisService.lock(key + i, 1, 120L, TimeUnit.SECONDS);
    if(lock){
    log.info("mqqueer成功:" + i);
    socketMqKey = key + i;
    new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
    log.info("续约");
    redisService.expire(socketMqKey,120L);
    }
    },10 * 1000,10 * 1000);
    return socketMqKey;
    }else{
    log.info("mqqq失败:" + i);
    }
    }
    new BusinessException("mq队列异常");
    return null;
    }
    }

    配置

     消费者:

    @RabbitHandler
    @RabbitListener(queues = "#{webSocketQueue1.name}",concurrency="10")
    public void consumer(参数类型 参数) {
    //业务代码

    }
  • 相关阅读:
    关于标准库中的ptr_fun/binary_function/bind1st/bind2nd
    ptr_fun学习笔记
    stream_iterator、ostream_iterator 使用初探
    C++异常处理
    ext2文件系统
    C语言动态内存管理
    C++中为什么要用虚函数、指针或引用才能实现多态?
    hadoop本地库
    二分图最小点覆盖König定理的简单证明 (加入自己理解)
    Fence Repair POJ
  • 原文地址:https://www.cnblogs.com/maohuidong/p/15683749.html
Copyright © 2020-2023  润新知