Bootstrap

搭建环境麻烦?5分钟上手云主机快速开发

搭建环境麻烦?5分钟上手云主机快速开发

引言

在现代软件开发中,开发环境的搭建和维护是一项繁琐且容易出错的任务,本地开发环境往往面临配置复杂、稳定性不足和依赖管理困难等问题

华为云开发者空间提供的云主机环境,不仅解决本地开发环境中配置复杂、稳定性不足和依赖等问题,还为开发者提供性能强大、安全、稳定、高效的开发环境

开发者可以轻松申领并激活专属的云主机工作桌面,每台主机都预装了直观的可视化操作系统,并集成了CodeArts IDE工具以及Java、Python等流行编程语言的运行时插件

本文将详细介绍如何在华为云开发者空间的云主机中使用IDE工具结合Redis开发测试秒杀抢购功能,帮助读者充分理解该强大的开发环境

使用流程

使用流程图如下:

使用流程

云主机的申请与配置

在使用云主机前,需要先在开发者空间进行申请

华为云开发者空间

成功申请到云主机后需要进行配置,可以选择理想的操作系统以及镜像还要开发工具(这里我们选择Java的开发工具作为演示)

配置云主机

等待一段时间,成功创建云主机后,进入主界面

主界面.png

Git代码拉取

使用云主机进行开发时,最大的好处就是无序准备开发环境,因此我们可以把代码放入Git仓库

这样使用云主机时方便可以使用Git进行代码拉取

这里采用默认的GitCode,也可以在云主机默认火狐浏览器中使用Gitee、Github等

这里提前在GitCode存放了一个java(jedis) + redis秒杀商品的案例,我们把它下载下来

git.png

通常会下载到目录 /home/developer/Downloads

解压后使用工具打开项目.png

解压完文件后,使用Java开发工具打开

打开项目后会自动加载maven依赖进行构建项目,等待一段时间即可自动构建完成

构建项目.png

项目配置与运行

运行前需要配置主程序

配置主程序.png

在CaseTest类中点击右上角的绿色三角形启动按钮开始模拟抢购流程

抢购流程.gif

源码介绍

CaseTest启动类会创建20个线程模拟抢购流程

public class CaseTest {
    public static void main(String[] args) {
        ServiceOrder service = new ServiceOrder();
        for (int i = 0; i < 20; i++) {
            ThreadBuy client = new ThreadBuy(service);
            client.start();
        }
    }
}

其中ThreadBuy线程启动后会调用ServiceOrder的handleOrder方法处理订单

class ThreadBuy extends Thread {
    private ServiceOrder service;

    public ThreadBuy(ServiceOrder service) {
        this.service = service;
    }

    @Override
    public void start() {
        service.handleOrder();
    }
}

处理订单的方法中会使用redis实现的简易分布式锁来防止并发扣减数量

class ServiceOrder {
    //商品库存
    private final static int MAX = 10;

    //分布式锁
    DistributedLock DLock = new DistributedLock();

    //商品当前剩余数量
    int n = 10;

    public void handleOrder() {
        //随机生成用户名
        String userName = UUID.randomUUID().toString().substring(0, 8) + Thread.currentThread().getName();
        
        //加锁
        String identifier = DLock.getLockWithTimeout("Huawei Mate 10", 10000, 2000);
        System.out.println("正在为用户:" + userName + " 处理订单");
        if (n > 0) {
            int num = MAX - n + 1;
            System.out.println("用户:" + userName + "购买第" + num + "台,剩余" + (--n) + "台");
        } else {
            System.out.println("用户:" + userName + "无法购买,已卖完!");
        }
        //解锁
        DLock.releaseLock("Huawei Mate 10", identifier);
    }
}

分布式锁实现中需要更改IP、端口、密码三个配置为你的配置

public class DistributedLock {
    //IP
    private final static String HOST = "127.0.0.1";
    
    //密码
    private final static String AUTH = "123456";

    //端口
    private final static int PORT = 6379;

    private static final String SUCCESS = "OK";

    private static final String SET_IF_NOT_EXIST = "NX";

    private static final String EXPIRE_TIME = "PX";

    /*
     * @param lockName      锁名
     * @param timeout       获取锁的超时时间
     * @param lockTimeout   锁的有效时间
     * @return              锁的标识
     */
    public String getLockWithTimeout(String lockName, long timeout, long lockTimeout) {
        String ret = null;
        Jedis jedisClient = new Jedis(HOST, PORT);

        try {
            String authMsg = jedisClient.auth(AUTH);
            if (!SUCCESS.equals(authMsg)) {
                System.out.println("AUTH FAILED: " + authMsg);
            }

            String identifier = UUID.randomUUID().toString();
            String lockKey = "DLock:" + lockName;
            long end = System.currentTimeMillis() + timeout;

            while (System.currentTimeMillis() < end) {
                String result = jedisClient.set(lockKey, identifier, SET_IF_NOT_EXIST, EXPIRE_TIME, lockTimeout);
                if (SUCCESS.equals(result)) {
                    ret = identifier;
                    break;
                }

                try {
                    Thread.sleep(2);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        } catch (Exception e) {

        } finally {
            jedisClient.quit();
            jedisClient.close();
        }

        return ret;
    }

    /*
     * @param lockName        锁名
     * @param identifier    锁的标识
     */
    public void releaseLock(String lockName, String identifier) {
        Jedis jedisClient = new Jedis(HOST, PORT);

        try {
            String authMsg = jedisClient.auth(AUTH);
            if (!SUCCESS.equals(authMsg)) {
                System.out.println("AUTH FAILED: " + authMsg);
            }

            String lockKey = "DLock:" + lockName;
            if (identifier.equals(jedisClient.get(lockKey))) {
                jedisClient.del(lockKey);
            }
        } catch (Exception e) {

        } finally {
            jedisClient.quit();
            jedisClient.close();
        }
    }
}
搭建Redis

由于代码中配置的Redis在另一台服务器上,因此不需要本地再搭建redis

如果自己测试还需要手动在本地搭建Redis

右击桌面打开终端,输入安装Redis的命令 sudo apt-get install redis-server

安装redis

安装后检查redis是否运行 sudo systemctl status redis-server 并使用客户端测试redis是否能够正常使用

测试redis是否能正常使用.png

修改密码 vim /etc/redis/redis.conf

修改密码

修改后重启 sudo systemctl restart redis-server

总结

通过本文的介绍,同学们应该能够充分了解如何在华为云开发者空间的云主机中使用Java进行开发

云主机不仅解决了本地开发环境的配置复杂、稳定性不足和依赖管理困难等问题,还为开发者提供了一个性能强大、安全、稳定、高效的开发平台

希望本文的技术心得和实际案例能够帮助读者在实际开发中更好地利用华为云开发者空间,提升开发效率和项目质量

如果你在使用华为云开发者空间的过程中遇到任何问题或有更多的心得体会,欢迎在评论区留言交流

让我们一起探索云计算时代的高效开发之道!

;