mica-launcher 微服务启动器的设计和使用

本文介绍了一种名为mica-launcher的微服务启动器,它通过规范服务名和服务环境简化了微服务开发流程,并提供了一种简便的方式来管理和启动微服务。

前言

微服务中规范往往比代码更加重要,一些良好的规范,能让我们少走弯路。mica-launcher 启动器就是对服务名和服务环境进行了定制的处理,使得企业开发更加方便快捷。

服务名规范

服务名在微服务中起着至关重要的位置,一个好的服务名应该见名知意。下面是笔者在工作中总结的规范。

小开发团队-两级

例如:user-api

  1. 第一级 服务名
  2. 第二级 服务类型

多个开发团队-三级

将组名放到第一位,方便快速定位到技术组。

例如:mica-user-api

  1. 第一级 组名
  2. 第二级 服务名
  3. 第三级 服务类型

环境划分

愿景

启动器的使命就是让我们的 jar 在各种环境中都可以方便启动,不用添加过多的配置,减少新同学的学习成本,能快速上手。提供了环境的日志打印,避免启动期间的各种问题。

环境划分

dev(开发)、test(测试)、ontest(线上测试)、prod(正式),默认dev

启动环境变量

java命令行:
java -jar app.jar --spring.profiles.active=dev
JAVA_OPS
set JAVA_OPTS="-Dspring.profiles.active=test"
标注方式(代码层面,junit单元测试非常实用)
@ActiveProfiles({"junittest","productprofile"})
ENV方式
系统环境变量 SPRING_PROFILES_ACTIVE(注意:是大写)

背景故事

mica-launcher 最早的雏形初现在笔者的一些 JFinal 项目中,期初主要是为了适应开发阶段的 jetty 和正式环境的 tomcat 日志目录。
easy-JFinal.png

在 Spring boot 中我便设计了 mica-launcher 来处理服务环境,使其更加方便好用。

使用

使用起来比原生的 spring boot 启动器里多了一个服务名参数,微服务中服务名对一个服务特别重要,故在启动器启动时写死。

Maven

<dependency>
    <groupId>net.dreamlu</groupId>
    <artifactId>mica-launcher</artifactId>
</dependency>

Gradle

implementation "net.dreamlu:mica-launcher"
@SpringBootApplication
public class MicaExampleApplication {

    public static void main(String[] args) {
        MicaApplication.run("mica-example", MicaExampleApplication.class, args);
    }
}

注意:使用了 mica-launcher 启动器,需要结合 mica-test 进行单元测试,具体文章请查看 mica test 单元测试

启动器自动化配置

代码中可以采用注入 MicaProperties 来读取启动器中的一些变量,比如 env 等。
mica.prop 可以在配置文件中自定义配置。然后再在代码中使用 MicaProperties 读取。

配置项默认值说明
mica.envdev【只读】mica 环境变量,方便在代码中获取,设置无效.
mica.is-localfalse【只读】判断是否为 本地开发环境
mica.prop装载自定义配置 mica.prop.xxx
自定义配置
mica:
  prop:
    site-name: 如梦技术
    site-url: https://www.dreamlu.net
配置读取
@Autowired
private MicaProperties micaProperties;
public boolean savePost() {
    String siteName = micaProperties.get("site-name");
    String siteUrl = micaProperties.get("site-url");
    // .....
}

启动器插件扩展

启动器的主要目的是能更加方便的去注入一些通用配置,降低使用难度。mica-log4j2 就是一个启动器的扩展。
插件扩展基于 java SPI 技术,关于 java SPI 具体使用可以百度。

实现 LauncherService,重写 launcher 方法

下面是 LauncherService 的代码。

/**
 * launcher 扩展 用于一些组件发现
 *
 * @author L.cm
 */
public interface LauncherService {
   /**
    * 启动时 处理 SpringApplicationBuilder
    * @param builder SpringApplicationBuilder
    * @param env 系统变量 Environment
    * @param appName 服务名
    * @param profile 环境变量
    * @param isLocalDev 是否本地开发
    */
   void launcher(SpringApplicationBuilder builder, Environment env, String appName, String profile, boolean isLocalDev);
}

编写 SPI 文件放置到 resources 目录下

文件路径和文件名 META-INF/services/net.dreamlu.mica.launcher.LauncherService
内容为你编写的插件完整类名,例如:net.dreamlu.mica.log.LogLauncherServiceImpl

最佳实践

mica-launcher 中我们预制了环境变量,您可以再服务里将配置中心按环境来划分域名。在配置中可以使用 ${mica.env} 占位符完成配置。

例如:(配置服务域名)
config-dev.dreamlu.net
config-test.dreamlu.net
......
使用示例:
spring:
  cloud:
    consul:
      host: https://config-${mica.env}.dreamlu.vip
      port: 8500
      config:
        format: yaml

开源推荐

1.当策划需求一个声音需要随机播放多个随机音源的其中一个时,例如脚步声、普通攻击声,当这类声音一直播放的都是同一个音源的时候,人会产生听觉疲劳。如果使用wwise,客户端只需要触发事件就可以了,至于一个事件怎样去随机一个音效,就是策划管的事了。 2.根据材质播放不同的声音,例如挖掘土地挖掘金属、挖掘石块要产生不同的音效,这个功能可以让策划配置不同材料的switch名,客户端根据导表信息,自动设置switch,就会播放对应的音效。 3.声音曲线RTPC(real time parameter control),x轴可以是距离、时间等,y轴可以是音量、音调等,曲线是可以拖动调整的,这就产生了一个可以可视化调节的对应关系,而这种对应关系就不需要程序去管了。 4.对全部声音的状态处理,例如在陆地上水下,听到的声音效果应该是不同的,这个在wwise里可以进行比较简单的设置。 5.对音源文件的内存优化,例如一段较长的背景音乐,可以设置只加载正在播放的那一小片段。 6.交互式音乐,类似dota那种,当战斗的时候播放战斗音乐,战斗结束切换为一般BGM,这是通过触发器trigger实现的,客户端只需要判断切换战斗音乐的时机并触发,wwise会自动根据策划配置平滑过渡。 7.音效播放的各种效果,例如淡入淡出,播放之后停顿几秒继续播放,声音播放几秒之后慢慢变小等,都可以交由策划配置,客户端不用多写代码支持这些功能。 8.多平台支持,多语言支持。wwise支持多个平台,会根据平台不同输出不同的bank文件(一类音源的打包小集合),并做相关优化。当游戏的语音有多个国家语言版本的时候,wwise也能轻松设置。 9.性能监视。 10.动态混响,例如吃鸡这样的游戏,在房间里打狙击枪在平地上打狙击枪,由于房间内声音会来回反射,所以混响效果应该是不同的。通过游戏过程中,对RTPC实时变量的控制,可以达到此效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值