From 7b61058f5623b853e22aa394d36cf02ff05c5381 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Tue, 18 Feb 2020 21:28:33 +0800 Subject: [PATCH] =?utf8?q?feat:=20=E6=95=B4=E5=90=88=20multi-tenant-task?= =?utf8?q?=20=E5=BA=93=EF=BC=8C=E5=A2=9E=E5=8A=A0=20payapi.multitenant=20?= =?utf8?q?=E5=B1=9E=E6=80=A7=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 +- config/application-devel-pg-local.properties | 10 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- payapi/build.gradle | 1 + .../framework/core/DayendSettleTask.java | 39 ++++++---- .../tenant/TenantWorkerExecutor.java | 43 +++++++++++ .../framework/tenant/TenantWorkerTask.java | 8 +++ .../com/supwisdom/dlpay/PayApiApplication.kt | 72 +++++++++---------- .../dlpay/api/scheduler_sourcetype_chk.kt | 34 ++++++--- .../com/supwisdom/dlpay/api/scheduler_task.kt | 69 +++++++++++++----- .../api/service/impl/kafka_service_impl.kt | 18 ++--- .../src/main/resources/application.properties | 12 +++- 12 files changed, 215 insertions(+), 98 deletions(-) create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java diff --git a/build.gradle b/build.gradle index a860d67d..0e2feff3 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,6 @@ plugins { id 'org.jetbrains.kotlin.jvm' version '1.3.31' id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31' apply false id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31' apply false - id 'com.gradle.build-scan' version '2.0.2' id "com.palantir.git-version" version "0.12.2" id 'com.palantir.docker' version '0.22.2' apply false } @@ -78,7 +77,7 @@ subprojects { commonCodecVersion = '1.12' lombokVersion = '1.18.8' javaELVersion = '3.0.0' - shedlockVersion = '2.5.0' + shedlockVersion = '4.3.0' jose4jVersion = '0.6.5' jcabiManifestsVersion = '1.1' kotlnLogVersion = '1.6.26' @@ -102,7 +101,7 @@ subprojects { springSocialVersion = '1.1.6.RELEASE' springKafkaVersion = '2.2.8.RELEASE' postgresVersion = '42.2.5' - multiTenantLibVersion = '1.2.5' + multiTenantLibVersion = '1.3.2' } implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties index 3d596e36..ea8ea116 100644 --- a/config/application-devel-pg-local.properties +++ b/config/application-devel-pg-local.properties @@ -25,7 +25,7 @@ security.request.sign=false ################################################## ## quartz task scheduler shopbalance.updater.cron=- -payapi.sourcetype.checker.scheduler=* * * * * ? +payapi.sourcetype.checker.scheduler=- ############################################# spring.cloud.consul.enabled=false spring.cloud.consul.host=172.28.201.70 @@ -36,15 +36,12 @@ resttemplate.proxy.port=1087 #============== kafka =================== # 指定kafka 代理地址,可以多个 -spring.kafka.bootstrap-servers=172.28.201.101:9192 +spring.kafka.bootstrap-servers=localhost:32770;localhost:32771 #=============== provider ======================= spring.kafka.producer.retries=3 # 每次批量发送消息的数量 spring.kafka.producer.batch-size=16384 spring.kafka.producer.buffer-memory=33554432 -# 指定消息key和消息体的编解码方式 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer #===============kafka consumer ======================= # 指定默认消费者group id @@ -54,5 +51,4 @@ spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.enable-auto-commit=true spring.kafka.consumer.auto-commit-interval=100 # 指定消息key和消息体的编解码方式 -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer \ No newline at end of file +payapi.multitenant=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 75accab2..156a6491 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip diff --git a/payapi/build.gradle b/payapi/build.gradle index d8f169c4..3bbc8839 100644 --- a/payapi/build.gradle +++ b/payapi/build.gradle @@ -108,6 +108,7 @@ dependencies { implementation "com.supwisdom:multi-tenant-core:${multiTenantLibVersion}" implementation "com.supwisdom:multi-tenant-datasource:${multiTenantLibVersion}" implementation "com.supwisdom:multi-tenant-jwt:${multiTenantLibVersion}" + implementation "com.supwisdom:multi-tenant-task:${multiTenantLibVersion}" implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}" implementation files("libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar") diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java index 1eb9422a..bf31c52f 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java @@ -3,33 +3,48 @@ package com.supwisdom.dlpay.framework.core; import com.supwisdom.dlpay.exception.TransactionException; import com.supwisdom.dlpay.framework.domain.TSettleLog; import com.supwisdom.dlpay.framework.service.DayendSettleService; -import com.supwisdom.dlpay.framework.util.Constants; +import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask; import com.supwisdom.dlpay.framework.util.StringUtil; -import com.supwisdom.multitenant.TenantContextHolder; -import com.supwisdom.multitenant.TenantDetailsProvider; -import net.javacrumbs.shedlock.core.SchedulerLock; +import com.supwisdom.multitenant.task.ProcessingStatus; +import com.supwisdom.multitenant.task.WorkerResult; +import com.supwisdom.multitenant.task.support.TaskQueue; +import net.javacrumbs.shedlock.spring.annotation.SchedulerLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -@Component -public class DayendSettleTask { +@Component("dayendSettleTenantTask") +public class DayendSettleTask implements TenantWorkerTask { @Autowired private DayendSettleService dayendSettleService; - @Autowired - private TenantDetailsProvider tenantDetailsProvider; private TSettleLog settleLog; private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class); - @Scheduled(cron = "${dayend.settletask.cron}") - @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M") - public void doSettleTask() { + @Scheduled(cron = "${dayend.settletask.cron:-}") + @SchedulerLock(name = "DayendSettleTask", lockAtMostFor = "PT30M") + public void settleTask() { + try { + doSettleTask(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @Override + public WorkerResult execute(TaskQueue task) { + doSettleTask(); + WorkerResult result = new WorkerResult(task); + result.setResult(ProcessingStatus.SUCCESS); + result.setMessage("成功"); + return result; + } + + private void doSettleTask() { if (logger.isDebugEnabled()) logger.debug("进入日结算任务!"); - TenantContextHolder.getContext().setTenant(tenantDetailsProvider.defaultTenant()); settleLog = dayendSettleService.doCreateSettleLog(); //记录日志 try { diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java new file mode 100644 index 00000000..4eaea968 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java @@ -0,0 +1,43 @@ +package com.supwisdom.dlpay.framework.tenant; + +import com.supwisdom.multitenant.task.WorkerExecutor; +import com.supwisdom.multitenant.task.WorkerResult; +import com.supwisdom.multitenant.task.support.TaskQueue; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +import java.util.Optional; + +@Component +@Slf4j +public class TenantWorkerExecutor implements WorkerExecutor, ApplicationContextAware { + private ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + private String taskBeanName(TaskQueue task) { + return String.format("%sTenantTask", task.getTaskName()); + } + + private Optional findTask(TaskQueue task) { + try { + TenantWorkerTask workerTask = applicationContext.getBean(taskBeanName(task), TenantWorkerTask.class); + return Optional.of(workerTask); + } catch (BeansException ex) { + log.error("task <{}> not found", taskBeanName(task)); + throw ex; + } + } + + @Override + public WorkerResult execute(TaskQueue task) { + Optional workerTask = findTask(task); + return workerTask.get().execute(task); + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java new file mode 100644 index 00000000..aacb5818 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java @@ -0,0 +1,8 @@ +package com.supwisdom.dlpay.framework.tenant; + +import com.supwisdom.multitenant.task.WorkerResult; +import com.supwisdom.multitenant.task.support.TaskQueue; + +public interface TenantWorkerTask { + WorkerResult execute(TaskQueue task); +} diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt index 6118efb8..27b9c1c6 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt @@ -1,11 +1,7 @@ package com.supwisdom.dlpay -import com.supwisdom.dlpay.framework.service.TenantService import com.supwisdom.dlpay.framework.tenant.TenantCacheKeyGen -import com.supwisdom.dlpay.framework.util.Constants import com.supwisdom.multitenant.TenantContextHolder -import com.supwisdom.multitenant.TenantDetails -import com.supwisdom.multitenant.TenantDetailsProvider import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor import com.supwisdom.multitenant.exceptions.TenantNotDefException @@ -13,6 +9,8 @@ import com.supwisdom.multitenant.jwt.JwtTenantConfigAdapter import com.supwisdom.multitenant.jwt.annotations.EnableJwtTenantInterceptor import com.supwisdom.multitenant.jwt.config.JwtTenantConfig import com.supwisdom.multitenant.jwt.config.JwtToken +import com.supwisdom.multitenant.storage.annotations.EnableTenantDetailsStorage +import com.supwisdom.multitenant.task.annotations.EnableMultiTenantTaskWorker import io.lettuce.core.ReadFrom import mu.KotlinLogging import net.javacrumbs.shedlock.core.LockProvider @@ -188,37 +186,37 @@ class TenantConfigListener { } } -@Component -class MyTenantDetailsProvider : TenantDetailsProvider { - @Autowired - private lateinit var tenantService: TenantService - @Autowired - private lateinit var redisTemplate: RedisTemplate - - private val logger = KotlinLogging.logger { } - - private val defaultTenant = TenantDetails().apply { - id = Constants.DEFAULT_TENANTID - dbSchema = "public" - dataCenter = "default" - enabled = true - } - - override fun defaultTenant(): TenantDetails { - return defaultTenant - } - - override fun createDetailsById(id: String): TenantDetails { - logger.debug { "find tenant id <$id> ..." } - val schema = redisTemplate.opsForValue().get(id) ?: return defaultTenant - return TenantDetails().apply { - this.id = id - dbSchema = schema - dataCenter = "default" - enabled = true - } - } -} +//@Component +//class MyTenantDetailsProvider : TenantDetailsProvider { +// @Autowired +// private lateinit var tenantService: TenantService +// @Autowired +// private lateinit var redisTemplate: RedisTemplate +// +// private val logger = KotlinLogging.logger { } +// +// private val defaultTenant = TenantDetails().apply { +// id = Constants.DEFAULT_TENANTID +// dbSchema = "public" +// dataCenter = "default" +// enabled = true +// } +// +// override fun defaultTenant(): TenantDetails { +// return defaultTenant +// } +// +// override fun createDetailsById(id: String): TenantDetails { +// logger.debug { "find tenant id <$id> ..." } +// val schema = redisTemplate.opsForValue().get(id) ?: return defaultTenant +// return TenantDetails().apply { +// this.id = id +// dbSchema = schema +// dataCenter = "default" +// enabled = true +// } +// } +//} @Component class MyTenantJwtConfigAdapter : JwtTenantConfigAdapter { @@ -244,9 +242,11 @@ class MyTenantJwtConfigAdapter : JwtTenantConfigAdapter { @EnableHttpHeaderTenantInterceptor @EnableSessionTenantInterceptor @EnableJwtTenantInterceptor +@EnableTenantDetailsStorage +@EnableMultiTenantTaskWorker(propertyName = "payapi.multitenant") @ServletComponentScan -@EnableRetry @EnableAsync +@EnableRetry class PayApiApplication : SpringBootServletInitializer() { override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder { diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt index c57ddb1b..cb112343 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt @@ -11,14 +11,16 @@ import com.supwisdom.dlpay.api.service.SourceTypeService import com.supwisdom.dlpay.api.service.TransactionReconciliationService import com.supwisdom.dlpay.exception.TransactionException import com.supwisdom.dlpay.framework.service.SystemUtilService -import com.supwisdom.dlpay.framework.util.Constants +import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask import com.supwisdom.dlpay.framework.util.DateUtil import com.supwisdom.dlpay.util.ConstantUtil import com.supwisdom.multitenant.TenantContextHolder import com.supwisdom.multitenant.TenantDetails -import com.supwisdom.multitenant.TenantDetailsProvider +import com.supwisdom.multitenant.task.ProcessingStatus +import com.supwisdom.multitenant.task.WorkerResult +import com.supwisdom.multitenant.task.support.TaskQueue import mu.KotlinLogging -import net.javacrumbs.shedlock.core.SchedulerLock +import net.javacrumbs.shedlock.spring.annotation.SchedulerLock import org.springframework.beans.BeansException import org.springframework.beans.factory.annotation.Autowired import org.springframework.scheduling.annotation.Async @@ -69,8 +71,8 @@ import java.util.concurrent.TimeoutException * 2. 一致("equal") , 表示一致 * 3. 挂起("hangup"), 表示补帐出现异常 */ -@Component -class SourceTypeCheck { +@Component("sourcetypeCheckTenantTask") +class SourceTypeCheck : TenantWorkerTask { private val logger = KotlinLogging.logger { } @Autowired @@ -82,9 +84,6 @@ class SourceTypeCheck { @Autowired private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor - @Autowired - private lateinit var tenantDetailsProvider: TenantDetailsProvider - private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus { return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus().apply { this.sourceType = sourceType.sourceType @@ -161,10 +160,25 @@ class SourceTypeCheck { } } + override fun execute(task: TaskQueue?): WorkerResult { + doExecute() + return WorkerResult(task).apply { + result = ProcessingStatus.SUCCESS + message = "成功" + } + } + @Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}") - @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M") + @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostFor = "PT30M") fun runCheck() { - TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant() + try { + doExecute() + } catch (ex: Exception) { + ex.printStackTrace() + } + } + + private fun doExecute() { val allSourcetype = sourceTypeService.allEnabledSourcetype ?: return diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt index ba4b5e97..699bea3a 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt @@ -10,16 +10,20 @@ import com.supwisdom.dlpay.api.service.ConsumePayService import com.supwisdom.dlpay.api.service.DtlQueryResultService import com.supwisdom.dlpay.api.service.TransactionServiceProxy import com.supwisdom.dlpay.framework.service.SystemUtilService +import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.util.ConstantUtil -import net.javacrumbs.shedlock.core.SchedulerLock +import com.supwisdom.multitenant.task.ProcessingStatus +import com.supwisdom.multitenant.task.WorkerResult +import com.supwisdom.multitenant.task.support.TaskQueue +import net.javacrumbs.shedlock.spring.annotation.SchedulerLock import org.springframework.beans.factory.annotation.Autowired import org.springframework.scheduling.annotation.Scheduled import org.springframework.stereotype.Component import org.springframework.stereotype.Service -@Service -class MySchedulerTask { +@Service("shopbalanceUpdaterTenantTask") +class MySchedulerTask : TenantWorkerTask { @Autowired private lateinit var shopaccService: ShopaccService @@ -28,23 +32,38 @@ class MySchedulerTask { } @Scheduled(cron = "\${shopbalance.updater.cron:-}") - @SchedulerLock(name = "dealShopUnupdatedDtl", lockAtMostForString = "PT10M") + @SchedulerLock(name = "dealShopUnupdatedDtl", lockAtMostFor = "PT10M") fun dealShopUnupdatedDtl() { try { - shopaccService.findUnupdatedShopDtl(100).forEach { - doShopBlanceUpdate(it) - } + doExecute() } catch (ex: Exception) { ex.printStackTrace() } } + + private fun doExecute() { + shopaccService.findUnupdatedShopDtl(100).forEach { + doShopBlanceUpdate(it) + } + } + + /** + * tenant task 入口 + */ + override fun execute(task: TaskQueue?): WorkerResult { + doExecute() + return WorkerResult(task).apply { + this.result = ProcessingStatus.SUCCESS + this.message = "成功" + } + } } /** * 定时扫描TDtlQuery,查询第三方流水状态 * */ -@Component -class DtlQueryResultSchedulerTask { +@Component("dtlQueryResultTenantTask") +class DtlQueryResultSchedulerTask : TenantWorkerTask { @Autowired private lateinit var systemUtilService: SystemUtilService @Autowired @@ -57,23 +76,35 @@ class DtlQueryResultSchedulerTask { private lateinit var agentPayServiceContext: AgentPayServiceContext @Scheduled(cron = "\${query.third.transdtl.result.cron:-}") - @SchedulerLock(name = "DtlQueryResultSchedulerTask", lockAtMostForString = "PT10M") + @SchedulerLock(name = "DtlQueryResultSchedulerTask", lockAtMostFor = "PT10M") fun queryThirdTransdtlResult() { try { - //仅查询当天数据,查询次数在规定次数之下 - dtlQueryResultService.getNeedQueryRecords(systemUtilService.accdate, ConstantUtil.QUERY_MAX_COUNT).forEach { - try { - doQuery(it) - } catch (exp: Exception) { - it.qcnt = it.qcnt + 1 - dtlQueryResultService.saveOrUpdateDtlQuery(it) //次数加一 - } - } + doExecute() } catch (ex: Exception) { ex.printStackTrace() } } + override fun execute(task: TaskQueue?): WorkerResult { + doExecute() + return WorkerResult(task).apply { + result = ProcessingStatus.SUCCESS + message = "成功" + } + } + + private fun doExecute() { + //仅查询当天数据,查询次数在规定次数之下 + dtlQueryResultService.getNeedQueryRecords(systemUtilService.accdate, ConstantUtil.QUERY_MAX_COUNT).forEach { + try { + doQuery(it) + } catch (exp: Exception) { + it.qcnt = it.qcnt + 1 + dtlQueryResultService.saveOrUpdateDtlQuery(it) //次数加一 + } + } + } + private fun doQuery(dtlQuery: TDtlQuery) { if (ConstantUtil.QUERYTYPE_NEED_QUERY != dtlQuery.status) { return //已结束 diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt index 290bfaa1..6e50d792 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt @@ -15,10 +15,10 @@ import org.springframework.scheduling.annotation.Async import org.springframework.stereotype.Service @Service -class KafkaSendMsgServiceImpl:KafkaSendMsgService{ +class KafkaSendMsgServiceImpl : KafkaSendMsgService { val logger = KotlinLogging.logger { } @Autowired - private lateinit var kafkaTemplate: KafkaTemplate + private lateinit var kafkaTemplate: KafkaTemplate @Autowired private lateinit var msgDao: MsgDao @Autowired @@ -63,13 +63,13 @@ class KafkaSendMsgServiceImpl:KafkaSendMsgService{ message.custom = gson.toJson(extras) message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300) message.gids = it.uid - if(it.lastloginplatform.isNullOrEmpty()){ - message.platform="ios" - kafkaTemplate.send(topic, msg.msgid, gson.toJson(message)) - message.platform="android" - kafkaTemplate.send(topic, msg.msgid, gson.toJson(message)) - }else{ - kafkaTemplate.send(topic, msg.msgid, gson.toJson(message)) + if (it.lastloginplatform.isNullOrEmpty()) { + message.platform = "ios" + kafkaTemplate.send(topic, msg.msgid, message) + message.platform = "android" + kafkaTemplate.send(topic, msg.msgid, message) + } else { + kafkaTemplate.send(topic, msg.msgid, message) } } msg.pusheduids = uids diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties index efef870f..4c93ce7b 100644 --- a/payapi/src/main/resources/application.properties +++ b/payapi/src/main/resources/application.properties @@ -28,6 +28,14 @@ spring.http.encoding.force=true spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8 +######################################################## +# 指定消息key和消息体的编解码方式 +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer +spring.kafka.consumer.properties.spring.json.trusted.packages=com.supwisdom.multitenant.task.support +# 指定消息key和消息体的编解码方式 +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer ################################################## ## quartz task scheduler shopbalance.updater.cron=*/10 * * * * ? @@ -44,5 +52,7 @@ spring.redis.database=0 multi-tenant.header.key=X-TENANT-ID multi-tenant.session.name=tenant-id multi-tenant.session.enableSessionScopedBean=false -multi-tenant.dbschema=public multi-tenant.datasource.base-package=com.supwisdom.dlpay +multi-tenant.task.datacenter=default +multi-tenant.environment=default +multi-tenant.task.worker.name=payapi -- 2.17.1