
radarbase/radar-push-endpointRADAR Push Endpoint是一个提供REST接口的服务,用于将基于推送订阅的API连接到Apache Kafka。目前已集成Garmin健康数据推送服务,并支持通过扩展机制添加其他推送服务,适用于RADAR-base生态系统中的数据集成场景。
推送服务集成通过YAML配置文件进行设置,基本结构如下:
yamlpushIntegration: # 推送服务特定配置 garmin: enabled: true userRepositoryClass: "org.radarbase.push.integration.garmin.user.ServiceUserRepository" service-n: # 其他服务配置示例 enabled: true property-xyz: "value"
yamlpushIntegration: garmin: enabled: true userRepositoryClass: org.radarbase.push.integration.garmin.user.ServiceUserRepository
若使用GarminServiceUserRepository,需先在管理门户创建OAuth客户端,配置以下属性:
client_id: your_client_id client_secret: your_client_secret grant_type: client_credentials resources: res_restAuthorizer scope: "SUBJECT.READ", "MEASUREMENT.READ", "SUBJECT.UPDATE", "MEASUREMENT.CREATE"
然后配置YAML属性:
yamlpushIntegration: garmin: enabled: true userRepositoryClass: org.radarbase.push.integration.garmin.user.GarminServiceUserRepository userRepositoryUrl: "[***]" # 根据部署修改 userRepositoryClientId: "your_client_id" userRepositoryClientSecret: "your_client_secret" userRepositoryTokenUrl: "[***]" # 根据部署修改
使用Docker Compose启动服务:
shelldocker-compose up -d --build
待Kafka就绪后,创建数据接收主题:
shellTOPIC=test # 替换为实际主题名 docker-compose exec kafka-1 kafka-topics --create --topic $TOPIC --bootstrap-server kafka-1:9092
服务默认通过http://localhost:8090/push/integrations/访问。Garmin具体端点包括:
http://localhost:8090/push/integrations/garmin/dailieshttp://localhost:8090/push/integrations/garmin/activitieshttp://localhost:8090/push/integrations/garmin/activityDetailshttp://localhost:8090/push/integrations/garmin/manualActivitieshttp://localhost:8090/push/integrations/garmin/epochshttp://localhost:8090/push/integrations/garmin/sleepshttp://localhost:8090/push/integrations/garmin/bodyCompositionshttp://localhost:8090/push/integrations/garmin/stresshttp://localhost:8090/push/integrations/garmin/userMetricshttp://localhost:8090/push/integrations/garmin/moveIQhttp://localhost:8090/push/integrations/garmin/pulseOxhttp://localhost:8090/push/integrations/garmin/respirationhttp://localhost:8090/push/integrations/garmin/deregister新推送服务集成需实现于org.radarbase.push.integration.<service-name>包,主要包括以下组件:
定义服务所需的REST端点,参考GarminPushEndpoint实现。
创建实现UserRepository接口的类,提供用户信息查询功能。
创建实现radar-jersey库中AuthValidator接口的类,处理请求认证。
注册服务组件到Jersey上下文:
kotlinclass ServiceXIntegrationResourceEnhancer(private val config: Config) : JerseyResourceEnhancer { override fun ResourceConfig.enhance() { packages( "org.radarbase.push.integration.servicex.resource", "org.radarbase.push.integration.servicex.filter" ) } override fun AbstractBinder.enhance() { bind(config.pushIntegration.servicex.userRepository) .to(UserRepository::class.java) .named("servicex") .`in`(Singleton::class.java) bind(ServiceXAuthValidator::class.java) .to(AuthValidator::class.java) .named("servicex") .`in`(Singleton::class.java) } }
在DelegatedAuthValidator中添加服务路由:
kotlinfun delegate(): AuthValidator { return when { uriInfo.matches(GARMIN_QUALIFIER) -> namedValidators.named(GARMIN_QUALIFIER).get() uriInfo.matches("servicex") -> namedValidators.named("servicex").get() // 添加新服务路由 else -> throw IllegalStateException() } }
在Config中添加服务配置:
kotlindata class PushIntegrationConfig( val garmin: GarminConfig = GarminConfig(), val servicex: ServiceXConfig // 新服务配置 ) data class ServiceXConfig( val enabled: Boolean = false, val userRepositoryClass: String, val property1: String, // 服务特定属性 val property2: List<String> )
在PushIntegrationEnhancerFactory中注册新服务:
kotlinif(config.pushIntegration.servicex.enabled) { enhancersList.add(ServiceXIntegrationResourceEnhancer(config)) }



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务