搭建环境麻烦?5分钟上手云主机快速开发【华为开发者空间】

举报
菜菜的后端私房菜 发表于 2024/11/20 09:19:29 2024/11/20
【摘要】 搭建环境麻烦?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进行开发

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

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

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

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

我正在参加【有奖征集 第34期】华为开发者空间一行代码快速上云,参与视频、文章投稿赢2000元开发者礼包

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。