本文介绍了CosmicStudio的丝滑特性及安装配置中遇到的问题及解决方案。CosmicStudio的启动速度和配置环境受到好评,但轻量级启动方式导致重启后登录信息丢失,需通过安装redis和rabbitmq解决。同时,文件服务在配置非轻量级时未启动,通过替换配置解决了这一问题。最后提供了DebugServer类代码和感谢指导老师的致辞。
CosmicStudio的丝滑确实让开发者难以放弃,对比于4.x及一下版本的轻量级启动方式,少了黑窗等操作不说,首先运行方式和启动速度都非常值得一夸,更何况可以配置多个苍穹环境,还融合了代码构建等方面的功能,再配合IDEA插件开发助手,一个词,舒服。强烈安利。
这里我们解决两个问题,一个是cosmic studio安装的苍穹是轻量级的,这里会有一个问题,就是说我们每次重启idea的时候,我们的登录信息会被清空。另外一个是文件服务系统的问题,cosmic studio启动的苍穹服务可以监听到8100,使用的是 kd.bos.fileservice.lightfilestorage.LightFileStorage 轻量级的文件服务,但使用IDEA启动并配置启动模式为非轻量级时,这个轻量级的文件服务并没有被启动,所以这就造成了解决了第一个问题的基础上,文件服务的不可用。
问题一:
轻量级的启动方式是以内存模拟redis存储登录信息的,所以重启后会丢失。所以我们需要安装redis组件来解决这个问题,但仅仅安装redis也不行,需要rabbitmq来配合。
安装步骤:
1. redis下载(采用的zip,也可以自行下载msi)
2. Erlang OTP下载 rabbitmq下载 (RabbityMQ的安装需要依赖的 Erlang, 且版本需要匹配)
配置服务:
安装配置好环境变量之后,我们开始正确的配置服务
rabbitmq:
安装完成后,rabbitmq注册了Windows服务,启动,浏览器访问http://localhost:15672 进入rabbitmq的配置后台,初始密码是 guest/guest
在Admin界面添加用户admin/pwd,tag选择Admin,添加完成用户后,需要进行授权
点击用户列表的admin用户,进入授权界面
授权完成后可以看到下图从No Access出现 / 代表第一步授权成功
接下来需要配置该用户可访问的virtual hosts,在该界面的右侧菜单中有一个 Virtual Hosts菜单
进入后添加name为ierp的virtual host
保存后返回用户界面,确定admin用户可访问的virtual host由 / 变为 /,ierp 即成功
最后添加名为ierp的queue
完成后进入MC,修改集群配置中的 mq.server.password 为你添加的用户admin的密码
2. redis:
本文采用的是压缩包的形式安装,解压到指定目录后,修改 redis.windows.conf 和 redis.windows-service.conf ,添加配置 requirepass pwd 配置密码。配置完成后,使用管理员的方式打开cmd,执行命令注册redis server到Windows server中。 redis-server.exe --service-install redis.windows.conf
注册成功后启动服务,再启动redis-cli.exe,在黑窗中输入auth pwd 显示为ok即完成配置
完成后进入MC,在组件维护的redis管理中,添加redis cache、redis session、redis algo的连接配置,使用127.0.0.1/6379/pwd测试连接并保存。保存成功后在集群页面配置redis,保存并发布。
3. 服务启动:
Launcher.java中修改配置:
set("lightweightdeploy", "false");
这样就完成了非轻量级环境的登录信息缓存处理。
问题二:
文件服务参考这篇帖子文件存储扩展开发可以了解一些苍穹文件服务的基本知识。但我没有按照这篇帖子来处理,做一个更简单的方案,直接替换cosmic studio创建的苍穹的文件服务(经实践,使用linux环境的文件服务可行)。
进入MC,替换如下配置:
集群配置:
管理中心配置
最后发布即可。后续方便,可以探讨下Windows本地文件服务的应用。
最后放一个Debugsserver类,需要的同学自取,记得把各种环境变量替换成自己的。
package kd.cosmic.server; import java.io.File; import java.net.InetAddress; import kd.bos.config.client.util.ConfigUtils; import kd.bos.service.webserver.JettyServer; public class DebugServer { public static void main(String[] args) throws Exception { propertyLight(); //property(); } /** * 轻量级改非轻量级 * @throws Exception */ private static void propertyLight() throws Exception { String zk = "127.0.0.1:2181/?user=admin&password=admin"; String mc = "http://127.0.0.1:8080"; System.setProperty("lightweightdeploy", "false"); // 设置集群环境名称和配置服务器地址 System.setProperty("appName", "why-cosmic"); System.setProperty("clusterName", "cosmic"); System.setProperty("domain.tenantCode", "ierp"); // 苍穹访问配置 System.setProperty("JETTY_WEB_PORT", "8080"); System.setProperty("JETTY_CONTEXT", "ierp"); System.setProperty("domain.contextUrl", "http://127.0.0.1:8080/ierp"); // 静态资源配置 System.setProperty("JETTY_WEBRES_PATH","C:/Users/kingdee/IdeaProjects/cosmic20230728-server/webapp/static-file-service"); // redis配置 String redisUrl = "127.0.0.1:6379/Cosmic@2003"; System.setProperty("redis.serversForCache", redisUrl); System.setProperty("redis.serversForSession", redisUrl); System.setProperty("algo.storage.redis.url", redisUrl); // rabbitmq配置 String mqHost = "127.0.0.1"; String mqPort = "8172"; // 默认5672 String mqUser = "cosmic"; String mqPwd = "Cosmic@2003"; String mqVhost = "ierp"; StringBuilder builder = new StringBuilder(); builder.append("type=rabbitmq").append(System.getProperty("line.separator")) .append("host=").append(mqHost).append(System.getProperty("line.separator")) .append("port=").append(mqPort).append(System.getProperty("line.separator")) .append("user=").append(mqUser).append(System.getProperty("line.separator")) .append("password=").append(mqPwd).append(System.getProperty("line.separator")) .append("vhost=").append(mqVhost); System.setProperty("mq.server", builder.toString()); // 文件服务器地址配置 String fileserverUrl = "http://127.0.0.1:8080/fileserver"; System.setProperty("attachmentServer.url", fileserverUrl); System.setProperty("fileserver", fileserverUrl); //文件服务器地址 System.setProperty("imageServer.url", fileserverUrl); System.setProperty("tenant.code.type", "config"); System.setProperty("mq.debug.queue.tag", "why"); System.setProperty("configUrl", zk); System.setProperty("mc.server.url", mc); System.setProperty("configAppName", "mservice,web"); System.setProperty("webmserviceinone", "true"); System.setProperty("file.encoding", "utf-8"); //System.setProperty("mq.consumer.register", "true"); System.setProperty("dubbo.protocol.port", "28888"); System.setProperty("dubbo.consumer.url", "dubbo://localhost:28888"); System.setProperty("dubbo.consumer.url.qing", "dubbo://localhost:30880"); System.setProperty("dubbo.registry.register", "true"); System.setProperty("dubbo.service.lookup.local", "false"); System.setProperty("appSplit", "false"); System.setProperty("db.sql.out", "false"); System.setProperty("env.type", "dev"); System.setProperty("trace.reporter.type", "sword"); System.setProperty("redismodelcache.enablelua", "true"); System.setProperty("lightweightdeploy.services", ""); //开发模式启动苍穹 System.setProperty("login.type", "STANDALONE"); JettyServer.main(null); } }
最后致谢匡唐喜老师,高俊老师,吴辉宇老师,感谢三位老师的指导和点播,完成了本环境的配置,也谢谢各位金蝶总部的老师给苍穹的开发者提供了更加便利的工具。
推荐阅读