正在显示
8 个修改的文件
包含
1123 行增加
和
0 行删除
.gitignore
0 → 100644
config/application.yml
0 → 100755
| 1 | + | ||
| 2 | +#上传文件的路径,要带斜杠 | ||
| 3 | +web: | ||
| 4 | + upload-path: upload/ | ||
| 5 | +server: | ||
| 6 | + port: 11112 | ||
| 7 | + servlet: | ||
| 8 | + context-path: ${SERVER_CONTEXTPATH:} | ||
| 9 | +spring: | ||
| 10 | + devtools: | ||
| 11 | + add-properties: false | ||
| 12 | + profiles: | ||
| 13 | + active: dev | ||
| 14 | + mvc: | ||
| 15 | + #静态资源,设置上传文件的访问, | ||
| 16 | + static-path-pattern: /** | ||
| 17 | + resources: | ||
| 18 | + static-locations: classpath:/META-INF/resources/,classpath:/static,classpath:/resources/,file:${web.upload-path} | ||
| 19 | + | ||
| 20 | + application: | ||
| 21 | + name: message-bus-trans-message | ||
| 22 | + redis: | ||
| 23 | +# host: 127.0.0.1 | ||
| 24 | + host: 8.131.245.248 | ||
| 25 | + port: 6379 | ||
| 26 | + password: dsly@admin | ||
| 27 | + jackson: | ||
| 28 | + serialization: | ||
| 29 | + FAIL_ON_EMPTY_BEANS: false | ||
| 30 | + #springboot2.0之后会把Date类型字段自动给转成UTC字符串 如:1990-11-26T16:00:00.000+0000,如果想转成时间戳在application.properties配置文件增加以下配置 | ||
| 31 | + date-format: yyyy-MM-dd HH:mm:ss | ||
| 32 | + #时区必须要设置 | ||
| 33 | + time-zone: GMT+8 | ||
| 34 | + #ALWAYS的意思是即时属性为null,仍然也会输出这个key | ||
| 35 | + default-property-inclusion: always | ||
| 36 | + | ||
| 37 | + cloud: | ||
| 38 | + #eureka主机名,会在控制页面中显示 | ||
| 39 | + #DEV环境关闭注册。 | ||
| 40 | + features: | ||
| 41 | + enabled: true | ||
| 42 | + discovery: | ||
| 43 | + enabled: true | ||
| 44 | + service-registry: | ||
| 45 | + auto-registration: | ||
| 46 | + enabled: true | ||
| 47 | + | ||
| 48 | + datasource: | ||
| 49 | + type: com.alibaba.druid.pool.DruidDataSource | ||
| 50 | + #oracle | ||
| 51 | + #driver-class-name=oracle.jdbc.OracleDriver | ||
| 52 | + #url=jdbc:oracle:thin:@10.50.3.68:1521:CGODW | ||
| 53 | + #username=CGOETL | ||
| 54 | + #password=1q2w3e4r | ||
| 55 | + #spring datasource mysql,注意编码配置,缺少数据库编码配置容易引起中文入库乱码 | ||
| 56 | +# url: jdbc:mysql://118.31.66.166:3306/station?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 | ||
| 57 | + url: jdbc:mysql://8.131.245.248:3306/zz_logistics?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 | ||
| 58 | + username: root | ||
| 59 | + password: ZZdsly123 | ||
| 60 | + driver-class-name: com.mysql.cj.jdbc.Driver | ||
| 61 | + #配置初始化大小/最小/最大 | ||
| 62 | + druid: | ||
| 63 | + initial-size: 10 | ||
| 64 | + min-idle: 10 | ||
| 65 | + max-active: 20 | ||
| 66 | + #获取连接等待超时时间 | ||
| 67 | + max-wait: 60000 | ||
| 68 | + #一个连接在池中最小生存的时间 | ||
| 69 | + min-evictable-idle-time-millis: 300000 | ||
| 70 | + #间隔多久进行一次检测,检测需要关闭的空闲连接 | ||
| 71 | + time-between-eviction-runs-millis: 60000 | ||
| 72 | + #mysql | ||
| 73 | + validation-query: SELECT 1 FROM DUAL | ||
| 74 | + #oracle | ||
| 75 | + #druid.validation-query:SELECT 'x' FROM DUAL | ||
| 76 | + test-while-idle: true | ||
| 77 | + test-on-borrow: false | ||
| 78 | + test-on-return: false | ||
| 79 | + default-auto-commit: true | ||
| 80 | +# tomcat: | ||
| 81 | +# max-wait: 10 | ||
| 82 | +# max-idle: 10000 | ||
| 83 | +# min-idle: 5 | ||
| 84 | +# initial-size: 5 | ||
| 85 | + | ||
| 86 | +eureka: | ||
| 87 | + instance: | ||
| 88 | + #eureka服务器页面中status的请求路径 | ||
| 89 | +# status-page-url: http://${eureka.instance.hostname}:${server.port}/index | ||
| 90 | + prefer-ip-address: true | ||
| 91 | + instance-id: ${spring.cloud.client.ip-address}:${server.port} | ||
| 92 | + hostname: ${spring.cloud.client.ip-address} | ||
| 93 | + lease-renewal-interval-in-seconds: 15 | ||
| 94 | + lease-expiration-duration-in-seconds: 45 | ||
| 95 | + health-check-url-path: /actuator/health | ||
| 96 | + metadata-map: | ||
| 97 | + user: | ||
| 98 | + name: "admin" #These two are needed so that the server | ||
| 99 | + password: "123456" | ||
| 100 | + client: | ||
| 101 | + #eureka注册中心服务器地址 | ||
| 102 | + service-url: | ||
| 103 | +# defaultZone: http://127.0.0.1:12345/eureka/ | ||
| 104 | + defaultZone: http://192.168.1.53:12345/eureka/ | ||
| 105 | + registry-fetch-interval-seconds: 30 | ||
| 106 | + | ||
| 107 | + | ||
| 108 | + | ||
| 109 | +management: | ||
| 110 | + endpoints: | ||
| 111 | + enabled-by-default: true | ||
| 112 | + web: | ||
| 113 | + exposure: | ||
| 114 | + include: "*" | ||
| 115 | + endpoint: | ||
| 116 | + health: | ||
| 117 | + show-details: always | ||
| 118 | + shutdown: | ||
| 119 | + enabled: true | ||
| 120 | + | ||
| 121 | +mybatis: | ||
| 122 | + mapper-locations: classpath:mapping/*.xml | ||
| 123 | + type-aliases-package: com.sunyo.usercenter.heartbeat.model | ||
| 124 | +pagehelper: | ||
| 125 | + #auto-dialect: true | ||
| 126 | + #auto-runtime-dialect: true | ||
| 127 | + helper-dialect: mysql | ||
| 128 | + reasonable: true | ||
| 129 | + | ||
| 130 | + support-methods-arguments: true | ||
| 131 | + params: count=countSql | ||
| 132 | + | ||
| 133 | +#debug配置,debug或者为true的时候,logback才会记录和写入日志文件 | ||
| 134 | +trace: false | ||
| 135 | +debug: true | ||
| 136 | + | ||
| 137 | +logging: | ||
| 138 | + file: | ||
| 139 | + path: ./logs/ | ||
| 140 | + name: system.log | ||
| 141 | + config: config/logback-dev.xml | ||
| 142 | + #转移到logback配置文件中 | ||
| 143 | + #level: | ||
| 144 | + #org.apache.tomcat: info | ||
| 145 | + #com.tianbo.warehouse.dao: DEBUG | ||
| 146 | + #org.springframework.security: trace | ||
| 147 | + #日志配置,输出到文本, | ||
| 148 | +#Java Web Token 时效时间,单位秒 | ||
| 149 | +jwt: | ||
| 150 | + max-alive: 30000 | ||
| 151 | +message-bus: | ||
| 152 | + url: | ||
| 153 | + #账户登录地址 | ||
| 154 | + login-url: http://36.134.143.171:8083/api/zz-uaa/common/bus/login | ||
| 155 | + #心跳地址 | ||
| 156 | + hearbit-url: http://36.134.143.171:8083/api/cloud-user-center-heartbeat/heartbeat | ||
| 157 | + #报文发送地址 | ||
| 158 | + send-url: http://36.134.143.171:8083/api/kafka-server-producer/kafka/send | ||
| 159 | + #报文接收地址 | ||
| 160 | + get-url: http://36.134.143.171:8083/api/kafka-server-consumer/kafka/receive | ||
| 161 | + auth: | ||
| 162 | + username: yangyucheng | ||
| 163 | + password: 111111 | ||
| 164 | + #心跳间隔时间默认10秒,单位毫秒 | ||
| 165 | + heartbit-interval: 10000 | ||
| 166 | +info: | ||
| 167 | + version: 1.0 | ||
| 168 | + description: "消息总线-消息转发服务。[转发大数据小组消息到总线上]" |
config/logback-dev.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!--参考文档链接:https://blog.csdn.net/qq_34912478/article/details/80877132--> | ||
| 3 | +<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> | ||
| 4 | +<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --> | ||
| 5 | +<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> | ||
| 6 | +<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> | ||
| 7 | +<configuration scan="true" scanPeriod="60 seconds"> | ||
| 8 | + | ||
| 9 | + <!--<include resource="org/springframework/boot/logging/logback/base.xml" />--> | ||
| 10 | + | ||
| 11 | + <contextName>logback</contextName> | ||
| 12 | + <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> | ||
| 13 | + <property name="log.path" value="./logs" /> | ||
| 14 | + | ||
| 15 | + <!-- 彩色日志 --> | ||
| 16 | + <!-- 彩色日志依赖的渲染类 --> | ||
| 17 | + <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> | ||
| 18 | + <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> | ||
| 19 | + <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> | ||
| 20 | + <!-- 彩色日志格式 --> | ||
| 21 | + <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + <!--输出到控制台--> | ||
| 25 | + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> | ||
| 26 | + <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> | ||
| 27 | + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> | ||
| 28 | + <level>debug</level> | ||
| 29 | + </filter> | ||
| 30 | + <encoder> | ||
| 31 | + <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> | ||
| 32 | + <!-- 设置字符集 --> | ||
| 33 | + <charset>UTF-8</charset> | ||
| 34 | + </encoder> | ||
| 35 | + </appender> | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + <!--输出到文件--> | ||
| 39 | + | ||
| 40 | + <!-- 时间滚动输出 level为 DEBUG 日志 --> | ||
| 41 | + <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||
| 42 | + <!-- 正在记录的日志文件的路径及文件名 --> | ||
| 43 | + <file>${log.path}/log_debug.log</file> | ||
| 44 | + <!--日志文件输出格式--> | ||
| 45 | + <encoder> | ||
| 46 | + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||
| 47 | + <charset>UTF-8</charset> <!-- 设置字符集 --> | ||
| 48 | + </encoder> | ||
| 49 | + <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||
| 50 | + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||
| 51 | + <!-- 日志归档 --> | ||
| 52 | + <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||
| 53 | + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||
| 54 | + <maxFileSize>100MB</maxFileSize> | ||
| 55 | + </timeBasedFileNamingAndTriggeringPolicy> | ||
| 56 | + <!--日志文件保留天数--> | ||
| 57 | + <maxHistory>15</maxHistory> | ||
| 58 | + </rollingPolicy> | ||
| 59 | + <!-- 此日志文件只记录debug级别的 --> | ||
| 60 | + <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||
| 61 | + <level>debug</level> | ||
| 62 | + <onMatch>ACCEPT</onMatch> | ||
| 63 | + <onMismatch>DENY</onMismatch> | ||
| 64 | + </filter> | ||
| 65 | + </appender> | ||
| 66 | + | ||
| 67 | + <!-- 时间滚动输出 level为 INFO 日志 --> | ||
| 68 | + <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||
| 69 | + <!-- 正在记录的日志文件的路径及文件名 --> | ||
| 70 | + <file>${log.path}/log_info.log</file> | ||
| 71 | + <!--日志文件输出格式--> | ||
| 72 | + <encoder> | ||
| 73 | + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||
| 74 | + <charset>UTF-8</charset> | ||
| 75 | + </encoder> | ||
| 76 | + <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||
| 77 | + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||
| 78 | + <!-- 每天日志归档路径以及格式 --> | ||
| 79 | + <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||
| 80 | + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||
| 81 | + <maxFileSize>100MB</maxFileSize> | ||
| 82 | + </timeBasedFileNamingAndTriggeringPolicy> | ||
| 83 | + <!--日志文件保留天数--> | ||
| 84 | + <maxHistory>15</maxHistory> | ||
| 85 | + </rollingPolicy> | ||
| 86 | + <!-- 此日志文件只记录info级别的 --> | ||
| 87 | + <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||
| 88 | + <level>info</level> | ||
| 89 | + <onMatch>ACCEPT</onMatch> | ||
| 90 | + <onMismatch>DENY</onMismatch> | ||
| 91 | + </filter> | ||
| 92 | + </appender> | ||
| 93 | + | ||
| 94 | + <!-- 时间滚动输出 level为 WARN 日志 --> | ||
| 95 | + <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||
| 96 | + <!-- 正在记录的日志文件的路径及文件名 --> | ||
| 97 | + <file>${log.path}/log_warn.log</file> | ||
| 98 | + <!--日志文件输出格式--> | ||
| 99 | + <encoder> | ||
| 100 | + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||
| 101 | + <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||
| 102 | + </encoder> | ||
| 103 | + <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||
| 104 | + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||
| 105 | + <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||
| 106 | + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||
| 107 | + <maxFileSize>100MB</maxFileSize> | ||
| 108 | + </timeBasedFileNamingAndTriggeringPolicy> | ||
| 109 | + <!--日志文件保留天数--> | ||
| 110 | + <maxHistory>15</maxHistory> | ||
| 111 | + </rollingPolicy> | ||
| 112 | + <!-- 此日志文件只记录warn级别的 --> | ||
| 113 | + <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||
| 114 | + <level>warn</level> | ||
| 115 | + <onMatch>ACCEPT</onMatch> | ||
| 116 | + <onMismatch>DENY</onMismatch> | ||
| 117 | + </filter> | ||
| 118 | + </appender> | ||
| 119 | + | ||
| 120 | + | ||
| 121 | + <!-- 时间滚动输出 level为 ERROR 日志 --> | ||
| 122 | + <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||
| 123 | + <!-- 正在记录的日志文件的路径及文件名 --> | ||
| 124 | + <file>${log.path}/log_error.log</file> | ||
| 125 | + <!--日志文件输出格式--> | ||
| 126 | + <encoder> | ||
| 127 | + <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> | ||
| 128 | + <charset>UTF-8</charset> <!-- 此处设置字符集 --> | ||
| 129 | + </encoder> | ||
| 130 | + <!-- 日志记录器的滚动策略,按日期,按大小记录 --> | ||
| 131 | + <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||
| 132 | + <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> | ||
| 133 | + <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||
| 134 | + <maxFileSize>100MB</maxFileSize> | ||
| 135 | + </timeBasedFileNamingAndTriggeringPolicy> | ||
| 136 | + <!--日志文件保留天数--> | ||
| 137 | + <maxHistory>15</maxHistory> | ||
| 138 | + </rollingPolicy> | ||
| 139 | + <!-- 此日志文件只记录ERROR级别的 --> | ||
| 140 | + <filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||
| 141 | + <level>ERROR</level> | ||
| 142 | + <onMatch>ACCEPT</onMatch> | ||
| 143 | + <onMismatch>DENY</onMismatch> | ||
| 144 | + </filter> | ||
| 145 | + </appender> | ||
| 146 | + | ||
| 147 | + <!-- | ||
| 148 | + <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 | ||
| 149 | + 以及指定<appender>。<logger>仅有一个name属性, | ||
| 150 | + 一个可选的level和一个可选的addtivity属性。 | ||
| 151 | + name:用来指定受此logger约束的某一个包或者具体的某一个类。 | ||
| 152 | + level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, | ||
| 153 | + 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 | ||
| 154 | + 如果未设置此属性,那么当前logger将会继承上级的级别。 | ||
| 155 | + addtivity:是否向上级logger传递打印信息。默认是true。 | ||
| 156 | + --> | ||
| 157 | + <!--<logger name="org.springframework.web" level="info"/>--> | ||
| 158 | + <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>--> | ||
| 159 | + <!-- | ||
| 160 | + 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: | ||
| 161 | + 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 | ||
| 162 | + 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: | ||
| 163 | + --> | ||
| 164 | + | ||
| 165 | + | ||
| 166 | + <!-- | ||
| 167 | + root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 | ||
| 168 | + level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, | ||
| 169 | + 不能设置为INHERITED或者同义词NULL。默认是DEBUG | ||
| 170 | + 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 | ||
| 171 | + --> | ||
| 172 | + <logger name="com.sunyo.usercenter.heartbeat.dao" level="debug" /> | ||
| 173 | + <!--开发环境:打印控制台--> | ||
| 174 | + <springProfile name="dev"> | ||
| 175 | + <logger name="org.apache.tomcat" level="info" /> | ||
| 176 | + <logger name="com.sunyo.usercenter.heartbeat" level="debug" /> | ||
| 177 | + <root level="INFO"> | ||
| 178 | + <appender-ref ref="CONSOLE" /> | ||
| 179 | + <appender-ref ref="DEBUG_FILE" /> | ||
| 180 | + <appender-ref ref="INFO_FILE" /> | ||
| 181 | + <appender-ref ref="WARN_FILE" /> | ||
| 182 | + <appender-ref ref="ERROR_FILE" /> | ||
| 183 | + </root> | ||
| 184 | + </springProfile> | ||
| 185 | + | ||
| 186 | + <!--生产环境:输出到文件--> | ||
| 187 | + <springProfile name="pro"> | ||
| 188 | + <root level="info"> | ||
| 189 | + <appender-ref ref="CONSOLE" /> | ||
| 190 | + <appender-ref ref="DEBUG_FILE" /> | ||
| 191 | + <appender-ref ref="INFO_FILE" /> | ||
| 192 | + <appender-ref ref="ERROR_FILE" /> | ||
| 193 | + <appender-ref ref="WARN_FILE" /> | ||
| 194 | + </root> | ||
| 195 | + </springProfile> | ||
| 196 | + | ||
| 197 | +</configuration> |
pom.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| 3 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 4 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
| 5 | + <modelVersion>4.0.0</modelVersion> | ||
| 6 | + <packaging>jar</packaging> | ||
| 7 | + <groupId>com.tianbo</groupId> | ||
| 8 | + <artifactId>messagebus-trans-message</artifactId> | ||
| 9 | + <version>1.0-SNAPSHOT</version> | ||
| 10 | + <description>消息转发服务</description> | ||
| 11 | + | ||
| 12 | + <parent> | ||
| 13 | + <groupId>org.springframework.boot</groupId> | ||
| 14 | + <artifactId>spring-boot-starter-parent</artifactId> | ||
| 15 | + <version>2.2.11.RELEASE</version> | ||
| 16 | + <relativePath/> <!-- lookup parent from repository --> | ||
| 17 | + </parent> | ||
| 18 | + | ||
| 19 | + <properties> | ||
| 20 | + <java.version>1.8</java.version> | ||
| 21 | + <spring-cloud.version>Hoxton.SR9</spring-cloud.version> | ||
| 22 | + <swagger2_version>2.9.2</swagger2_version> | ||
| 23 | + <fastjson_version>1.2.73</fastjson_version> | ||
| 24 | + <lombok_sersion>1.18.6</lombok_sersion> | ||
| 25 | + </properties> | ||
| 26 | + | ||
| 27 | + <dependencies> | ||
| 28 | + <dependency> | ||
| 29 | + <groupId>org.springframework.boot</groupId> | ||
| 30 | + <artifactId>spring-boot-starter-web</artifactId> | ||
| 31 | + </dependency> | ||
| 32 | + <dependency> | ||
| 33 | + <groupId>org.springframework.cloud</groupId> | ||
| 34 | + <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> | ||
| 35 | + </dependency> | ||
| 36 | + <!--lombok--> | ||
| 37 | + <dependency> | ||
| 38 | + <groupId>org.projectlombok</groupId> | ||
| 39 | + <artifactId>lombok</artifactId> | ||
| 40 | + <version>${lombok_sersion}</version> | ||
| 41 | + <scope>provided</scope> | ||
| 42 | + </dependency> | ||
| 43 | + <dependency> | ||
| 44 | + <groupId>com.alibaba</groupId> | ||
| 45 | + <artifactId>fastjson</artifactId> | ||
| 46 | + <version>${fastjson_version}</version> | ||
| 47 | + </dependency> | ||
| 48 | + </dependencies> | ||
| 49 | + <dependencyManagement> | ||
| 50 | + <dependencies> | ||
| 51 | + <dependency> | ||
| 52 | + <groupId>org.springframework.cloud</groupId> | ||
| 53 | + <artifactId>spring-cloud-dependencies</artifactId> | ||
| 54 | + <version>${spring-cloud.version}</version> | ||
| 55 | + <type>pom</type> | ||
| 56 | + <scope>import</scope> | ||
| 57 | + </dependency> | ||
| 58 | + </dependencies> | ||
| 59 | + </dependencyManagement> | ||
| 60 | + <build> | ||
| 61 | + <plugins> | ||
| 62 | + <plugin> | ||
| 63 | + <groupId>org.springframework.boot</groupId> | ||
| 64 | + <artifactId>spring-boot-maven-plugin</artifactId> | ||
| 65 | + </plugin> | ||
| 66 | + </plugins> | ||
| 67 | + </build> | ||
| 68 | +</project> |
| 1 | +package com.tianbo.messagebus; | ||
| 2 | + | ||
| 3 | +import org.springframework.boot.SpringApplication; | ||
| 4 | +import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
| 5 | +import org.springframework.boot.web.client.RestTemplateBuilder; | ||
| 6 | +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; | ||
| 7 | +import org.springframework.context.annotation.Bean; | ||
| 8 | +import org.springframework.scheduling.TaskScheduler; | ||
| 9 | +import org.springframework.scheduling.annotation.EnableScheduling; | ||
| 10 | +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; | ||
| 11 | +import org.springframework.web.client.RestTemplate; | ||
| 12 | + | ||
| 13 | +@SpringBootApplication | ||
| 14 | +@EnableEurekaClient | ||
| 15 | +@EnableScheduling | ||
| 16 | +public class MessageTransApplication { | ||
| 17 | + | ||
| 18 | + public static void main(String[] args) { | ||
| 19 | + SpringApplication.run(MessageTransApplication.class, args); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + @Bean | ||
| 23 | + public RestTemplate restTemplate(RestTemplateBuilder builder) { | ||
| 24 | + return builder.build(); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + @Bean | ||
| 28 | + public TaskScheduler taskScheduler() { | ||
| 29 | + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); | ||
| 30 | + taskScheduler.setPoolSize(10); | ||
| 31 | + return taskScheduler; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +} |
| 1 | +package com.tianbo.messagebus.controller; | ||
| 2 | + | ||
| 3 | +import com.alibaba.fastjson.JSON; | ||
| 4 | +import com.alibaba.fastjson.JSONObject; | ||
| 5 | +import com.tianbo.messagebus.service.MessageBusProcessor; | ||
| 6 | +import org.apache.commons.lang.StringUtils; | ||
| 7 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 8 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 9 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 10 | +import org.springframework.web.bind.annotation.RestController; | ||
| 11 | + | ||
| 12 | +import javax.annotation.Resource; | ||
| 13 | +import javax.servlet.http.HttpServletRequest; | ||
| 14 | +import javax.servlet.http.HttpServletResponse; | ||
| 15 | +import java.io.Serializable; | ||
| 16 | +import java.util.Date; | ||
| 17 | + | ||
| 18 | +@RestController() | ||
| 19 | +@RequestMapping("/") | ||
| 20 | +public class HeartbeatController implements Serializable { | ||
| 21 | + private static final long serialVersionUID = 1L; | ||
| 22 | + | ||
| 23 | + | ||
| 24 | + @Autowired | ||
| 25 | + private HttpServletRequest request; | ||
| 26 | + | ||
| 27 | + @Autowired | ||
| 28 | + MessageBusProcessor messageBusDemo; | ||
| 29 | + | ||
| 30 | + @PostMapping("login") | ||
| 31 | + public void login(){ | ||
| 32 | + messageBusDemo.login(); | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + @PostMapping("getmsg") | ||
| 36 | + public void getmsg(){ | ||
| 37 | + messageBusDemo.getMsg(); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | +} |
| 1 | +package com.tianbo.messagebus.controller.response; | ||
| 2 | + | ||
| 3 | +import java.io.Serializable; | ||
| 4 | + | ||
| 5 | +public class ResultJson<T> implements Serializable{ | ||
| 6 | + | ||
| 7 | + private static final long serialVersionUID = 1L; | ||
| 8 | + | ||
| 9 | + // 状态码 正确为200 | ||
| 10 | + private String code = "200"; | ||
| 11 | + // 描述 | ||
| 12 | + private String msg = ""; | ||
| 13 | + | ||
| 14 | + private String error; | ||
| 15 | + // 返回对象 | ||
| 16 | + private T data; | ||
| 17 | + //返回的JWT | ||
| 18 | + private String jwtToken; | ||
| 19 | + | ||
| 20 | + public ResultJson() { | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public ResultJson(String code) { | ||
| 24 | + this.code = code; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public ResultJson(String code, String msg) { | ||
| 28 | + this.code = code; | ||
| 29 | + this.msg = msg; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + public ResultJson(T data) { | ||
| 33 | + this.data = data; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public ResultJson(String code, String msg, T data) { | ||
| 37 | + this.code = code; | ||
| 38 | + this.msg = msg; | ||
| 39 | + this.data = data; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + public ResultJson(String code, String msg, T data,String jwtToken) { | ||
| 43 | + this.code = code; | ||
| 44 | + this.msg = msg; | ||
| 45 | + this.data = data; | ||
| 46 | + this.jwtToken = jwtToken; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public String getCode() { | ||
| 50 | + return code; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + public void setCode(String code) { | ||
| 54 | + this.code = code; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + public String getMsg() { | ||
| 58 | + return msg; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + public void setMsg(String msg) { | ||
| 62 | + this.msg = msg; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + public String getError() { | ||
| 66 | + return error; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + public void setError(String error) { | ||
| 70 | + this.error = error; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + public T getData() { | ||
| 74 | + return data; | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + public void setData(T data) { | ||
| 78 | + this.data = data; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + public String getJwtToken() { | ||
| 82 | + return jwtToken; | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + public void setJwtToken(String jwtToken) { | ||
| 86 | + this.jwtToken = jwtToken; | ||
| 87 | + } | ||
| 88 | +} |
| 1 | +package com.tianbo.messagebus.service; | ||
| 2 | + | ||
| 3 | +import com.alibaba.fastjson.JSON; | ||
| 4 | +import com.alibaba.fastjson.JSONArray; | ||
| 5 | +import com.alibaba.fastjson.JSONObject; | ||
| 6 | +import lombok.extern.slf4j.Slf4j; | ||
| 7 | +import org.springframework.beans.factory.annotation.Value; | ||
| 8 | +import org.springframework.http.*; | ||
| 9 | +import org.springframework.scheduling.annotation.Async; | ||
| 10 | +import org.springframework.scheduling.annotation.EnableAsync; | ||
| 11 | +import org.springframework.scheduling.annotation.Scheduled; | ||
| 12 | +import org.springframework.stereotype.Service; | ||
| 13 | +import org.springframework.util.LinkedMultiValueMap; | ||
| 14 | +import org.springframework.util.MultiValueMap; | ||
| 15 | +import org.springframework.util.StringUtils; | ||
| 16 | +import org.springframework.web.client.RestTemplate; | ||
| 17 | + | ||
| 18 | +import javax.annotation.Resource; | ||
| 19 | +import java.io.Serializable; | ||
| 20 | + | ||
| 21 | +@Service | ||
| 22 | +@EnableAsync | ||
| 23 | +@Slf4j | ||
| 24 | +public class MessageBusProcessor { | ||
| 25 | + | ||
| 26 | + /**http://10.161.4.20:8083/ | ||
| 27 | + * 账户登录地址 | ||
| 28 | + */ | ||
| 29 | + @Value("${message-bus.url.login-url}") | ||
| 30 | + private String LOGIN_URL; | ||
| 31 | + /** | ||
| 32 | + * 账号名 | ||
| 33 | + */ | ||
| 34 | + @Value("${message-bus.auth.username}") | ||
| 35 | + private String USER_NAME; | ||
| 36 | +// private static final String USER_NAME = "HYYW"; | ||
| 37 | + /** | ||
| 38 | + * 登陆密码 | ||
| 39 | + */ | ||
| 40 | + @Value("${message-bus.auth.password}") | ||
| 41 | + private String USER_PASS; | ||
| 42 | +// private static final String USER_PASS = "ZZecargo123"; | ||
| 43 | + /** | ||
| 44 | + * 心跳接口地址 | ||
| 45 | + */ | ||
| 46 | + @Value("${message-bus.url.hearbit-url}") | ||
| 47 | + private String HEARTBEAT_URL; | ||
| 48 | + /** | ||
| 49 | + * 心跳间隔时间 单位S | ||
| 50 | + */ | ||
| 51 | + @Value("${message-bus.heartbit-interval}") | ||
| 52 | + private int HEARTBIT_INTERVAL; | ||
| 53 | + /** | ||
| 54 | + * 发送报文地址 | ||
| 55 | + */ | ||
| 56 | + @Value("${message-bus.url.send-url}") | ||
| 57 | + private String SEND_MSG_URL; | ||
| 58 | + /** | ||
| 59 | + * 接收报文地址 | ||
| 60 | + */ | ||
| 61 | + @Value("${message-bus.url.get-url}") | ||
| 62 | + private String GET_MSG_URL; | ||
| 63 | + /** | ||
| 64 | + * 存储登录后的token | ||
| 65 | + */ | ||
| 66 | + private static String TOKEN = ""; | ||
| 67 | + /** | ||
| 68 | + * 登录成功状态 | ||
| 69 | + */ | ||
| 70 | + private static Boolean LOGIN_STATUS=false; | ||
| 71 | + | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * HTTP请求框架 | ||
| 75 | + */ | ||
| 76 | + @Resource | ||
| 77 | + private RestTemplate restTemplate; | ||
| 78 | + | ||
| 79 | + /** | ||
| 80 | + * 发起登录,存储token | ||
| 81 | + * | ||
| 82 | + * @return | ||
| 83 | + */ | ||
| 84 | + public Boolean login() { | ||
| 85 | + try { | ||
| 86 | + /* | ||
| 87 | + * 发起HTTP 登录请求 | ||
| 88 | + * 登录接口的请求头为application/x-www-form-urlencoded | ||
| 89 | + */ | ||
| 90 | + HttpHeaders headers = new HttpHeaders(); | ||
| 91 | + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); | ||
| 92 | + | ||
| 93 | + /* | ||
| 94 | + * 请求参数 | ||
| 95 | + */ | ||
| 96 | + MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); | ||
| 97 | + params.add("username", USER_NAME); | ||
| 98 | + params.add("password", USER_PASS); | ||
| 99 | + | ||
| 100 | + HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers); | ||
| 101 | + | ||
| 102 | + /* | ||
| 103 | + * 提交HTTP访问,获取返回信息 | ||
| 104 | + */ | ||
| 105 | + ResponseEntity<String> response = restTemplate.postForEntity(LOGIN_URL, request, String.class); | ||
| 106 | + // 输出结果 | ||
| 107 | + log.info(response.getBody()); | ||
| 108 | + | ||
| 109 | + | ||
| 110 | + /* | ||
| 111 | + 校验是否登录成功 | ||
| 112 | + */ | ||
| 113 | + if (response.getStatusCode().equals(HttpStatus.OK)) { | ||
| 114 | + /** | ||
| 115 | + * 从返回信息中确定是否登录成功,并取得token | ||
| 116 | + * 返回格式 | ||
| 117 | + * { | ||
| 118 | + "code":200, | ||
| 119 | + "data":{ | ||
| 120 | + "account":"yangyucheng", | ||
| 121 | + "token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2MCIsIm5hbWUiOiLmnajnjonmiJDmtYvor5UiLCJpZCI6NjAsImlhdCI6MTYxNzM0ODM3MiwiYWNjb3VudCI6Inlhbmd5dWNoZW5nIn0.ElAs7BtV1tu6ApQXuPXzgXUgvja76bjEb-zxqhUON48" | ||
| 122 | + }, | ||
| 123 | + "message":"success", | ||
| 124 | + "success":true, | ||
| 125 | + "time":20210402152612604 | ||
| 126 | + } | ||
| 127 | + */ | ||
| 128 | + JSONObject resJson = JSON.parseObject(response.getBody()); | ||
| 129 | + JSONObject resData = resJson.getJSONObject("data"); | ||
| 130 | + String resCode = resJson.getString("code"); | ||
| 131 | + | ||
| 132 | + | ||
| 133 | + | ||
| 134 | + /* | ||
| 135 | + 校验并获取登陆成功后返回的token | ||
| 136 | + */ | ||
| 137 | + String authToken = resData.getString("token"); | ||
| 138 | + if ("200".equals(resCode) && !StringUtils.isEmpty(authToken) && authToken.length() > 10) { | ||
| 139 | + LOGIN_STATUS = true; | ||
| 140 | + | ||
| 141 | + //设置请求头部Authorization为token, token的类型为Bearer | ||
| 142 | + TOKEN = authToken; | ||
| 143 | + /* | ||
| 144 | + 登录成功开始心跳 | ||
| 145 | + */ | ||
| 146 | +// startHeartBit(); | ||
| 147 | + log.info("登录成功"); | ||
| 148 | + return true; | ||
| 149 | + }else { | ||
| 150 | + log.error("登录失败"); | ||
| 151 | + return false; | ||
| 152 | + } | ||
| 153 | + } else { | ||
| 154 | + log.error("登录失败"); | ||
| 155 | + return false; | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + } catch (Exception e) { | ||
| 159 | + log.error("登录失败->{}",e.toString()); | ||
| 160 | + return false; | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + | ||
| 164 | + /** | ||
| 165 | + * 定时心跳,维持在线状态,每10秒访问一次心跳接口 | ||
| 166 | + */ | ||
| 167 | + public void startHeartBit() { | ||
| 168 | + try { | ||
| 169 | + while (true) { | ||
| 170 | + heartBit(); | ||
| 171 | + Thread.sleep(HEARTBIT_INTERVAL); | ||
| 172 | + } | ||
| 173 | + } catch (InterruptedException e) { | ||
| 174 | + e.printStackTrace(); | ||
| 175 | + } | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + @Scheduled(fixedRate = 10000) | ||
| 179 | + public void heartBit() { | ||
| 180 | + if (!StringUtils.isEmpty(TOKEN) && LOGIN_STATUS){ | ||
| 181 | + /* | ||
| 182 | + * 发起HTTP 登录请求 | ||
| 183 | + * 登录接口的请求头为application/x-www-form-urlencoded | ||
| 184 | + */ | ||
| 185 | + HttpHeaders headers = new HttpHeaders(); | ||
| 186 | + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); | ||
| 187 | + /* | ||
| 188 | + * 设置获取到的token到头部信息Authorization节点中 | ||
| 189 | + */ | ||
| 190 | + headers.setBearerAuth(TOKEN); | ||
| 191 | + | ||
| 192 | + /* | ||
| 193 | + * 心跳接口无参数,访问接口即可 | ||
| 194 | + */ | ||
| 195 | + MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); | ||
| 196 | + | ||
| 197 | + HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers); | ||
| 198 | + | ||
| 199 | + /* | ||
| 200 | + * 提交HTTP访问,获取返回信息 | ||
| 201 | + */ | ||
| 202 | + ResponseEntity<String> response = restTemplate.postForEntity(HEARTBEAT_URL, request, String.class); | ||
| 203 | + // 输出结果 | ||
| 204 | + System.out.println(response.getBody()); | ||
| 205 | + if (response.getStatusCode().equals(HttpStatus.OK)) { | ||
| 206 | + log.info("心跳成功"); | ||
| 207 | + } else { | ||
| 208 | + log.error("心跳失败"); | ||
| 209 | + } | ||
| 210 | + } | ||
| 211 | + } | ||
| 212 | + | ||
| 213 | + /** | ||
| 214 | + * 发送消息 | ||
| 215 | + * | ||
| 216 | + * @return | ||
| 217 | + */ | ||
| 218 | + public Boolean sendMsg(MSG msg) { | ||
| 219 | + if (LOGIN_STATUS) { | ||
| 220 | + /* | ||
| 221 | + * 发起HTTP 登录请求 | ||
| 222 | + * 登录接口的请求头为application/json | ||
| 223 | + */ | ||
| 224 | + HttpHeaders headers = new HttpHeaders(); | ||
| 225 | + headers.setContentType(MediaType.APPLICATION_JSON); | ||
| 226 | + | ||
| 227 | + MSGS msgs = new MSGS(); | ||
| 228 | + msg.getHEADER().setSNDR("HYYW"); | ||
| 229 | + | ||
| 230 | + msgs.setMSG(msg); | ||
| 231 | + | ||
| 232 | + | ||
| 233 | + /* | ||
| 234 | + 设置要发送的实体类并将实体转换成Json字符串,这里以MAP类型举例 | ||
| 235 | + */ | ||
| 236 | +// Map<String, String> dataModel = new HashMap<>(); | ||
| 237 | +// dataModel.put("flightNo", "CV987"); | ||
| 238 | +// dataModel.put("flightDate", "MAY01"); | ||
| 239 | +// dataModel.put("waybillNo", "172-12345678"); | ||
| 240 | +// dataModel.put("weight", "20.01"); | ||
| 241 | +// dataModel.put("piece", "2"); | ||
| 242 | +// msg.getMSG().setBODY(JSON.toJSONString(dataModel)); | ||
| 243 | + | ||
| 244 | + /* | ||
| 245 | + * 设置获取到的token到头部信息Authorization节点中 | ||
| 246 | + */ | ||
| 247 | + headers.setBearerAuth(TOKEN); | ||
| 248 | + | ||
| 249 | + /* | ||
| 250 | + * 发起消息接口访问,发送消息 | ||
| 251 | + */ | ||
| 252 | + | ||
| 253 | + HttpEntity<MSGS> request = new HttpEntity<MSGS>(msgs, headers); | ||
| 254 | + ResponseEntity<String> response = restTemplate.postForEntity(SEND_MSG_URL, request, String.class); | ||
| 255 | + | ||
| 256 | + JSONObject resJson = JSON.parseObject(response.getBody()); | ||
| 257 | + String code = resJson.getString("code"); | ||
| 258 | + | ||
| 259 | + System.out.println(response.getBody()); | ||
| 260 | + | ||
| 261 | + if (response.getStatusCode().equals(HttpStatus.OK) && "200".equals(code)) { | ||
| 262 | + log.info("消息发送成功"); | ||
| 263 | + return true; | ||
| 264 | + } else { | ||
| 265 | + log.error("消息发送失败"); | ||
| 266 | + return false; | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + } | ||
| 270 | + return false; | ||
| 271 | + } | ||
| 272 | + | ||
| 273 | + | ||
| 274 | + /** | ||
| 275 | + * 收取消息 | ||
| 276 | + * | ||
| 277 | + * @return | ||
| 278 | + */ | ||
| 279 | + @Async | ||
| 280 | + @Scheduled(fixedRate = 300) | ||
| 281 | + public JSONArray getMsg() { | ||
| 282 | + if(!LOGIN_STATUS){ | ||
| 283 | + login(); | ||
| 284 | + return null; | ||
| 285 | + } | ||
| 286 | + /* | ||
| 287 | + * 发起HTTP 登录请求 | ||
| 288 | + * 登录接口的请求头为application/json | ||
| 289 | + */ | ||
| 290 | + HttpHeaders headers = new HttpHeaders(); | ||
| 291 | + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); | ||
| 292 | + headers.setBearerAuth(TOKEN); | ||
| 293 | + /* | ||
| 294 | + * 请求参数拼装 | ||
| 295 | + */ | ||
| 296 | + MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); | ||
| 297 | + params.add("username", "HYYW"); | ||
| 298 | + HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers); | ||
| 299 | + | ||
| 300 | + /* | ||
| 301 | + * 提交HTTP访问,获取返回信息 | ||
| 302 | + */ | ||
| 303 | + ResponseEntity<String> response = restTemplate.postForEntity(GET_MSG_URL, request, String.class); | ||
| 304 | + // 输出结果 | ||
| 305 | + log.info("获取到消息返回---{}---",response.getBody()); | ||
| 306 | + /* | ||
| 307 | + * 从返回信息中确定是否获取到消息 | ||
| 308 | + */ | ||
| 309 | + JSONObject resJson = JSON.parseObject(response.getBody()); | ||
| 310 | + String code = resJson.getString("code"); | ||
| 311 | + if (response.getStatusCode().equals(HttpStatus.OK) && "200".equals(code)) { | ||
| 312 | + | ||
| 313 | + JSONArray data = resJson.getJSONArray("data"); | ||
| 314 | + log.info("消息接收成功,接收消息为>>>{}<<<",data.toString()); | ||
| 315 | + | ||
| 316 | + for (int i = 0; i<data.size() ; i++) { | ||
| 317 | + /* | ||
| 318 | + 取得是大数据小组的实体,他们的msg.body的封装是以对象实体object封装的。不是json字符串。 | ||
| 319 | + */ | ||
| 320 | + String msg = data.getObject(i,String.class); | ||
| 321 | + JSONObject rootJson = JSON.parseObject(msg); | ||
| 322 | + JSONObject msgJson = rootJson.getJSONObject("MSG"); | ||
| 323 | + JSONObject body = msgJson.getJSONObject("BODY"); | ||
| 324 | + | ||
| 325 | + HEADER msgHeader = msgJson.getObject("HEADER",HEADER.class); | ||
| 326 | + | ||
| 327 | + MSG transMsg= new MSG(); | ||
| 328 | + String transBody = body.toJSONString(); | ||
| 329 | + transMsg.setHEADER(msgHeader); | ||
| 330 | + transMsg.setBODY(transBody); | ||
| 331 | + | ||
| 332 | + transMsg.toString(); | ||
| 333 | + | ||
| 334 | + /* | ||
| 335 | + 自定义对返回数据的处理 | ||
| 336 | + */ | ||
| 337 | + log.info("开始转发消息"); | ||
| 338 | + Boolean sendResult = sendMsg(transMsg); | ||
| 339 | + /** | ||
| 340 | + * todo:消息失败处理 | ||
| 341 | + */ | ||
| 342 | + if(!sendResult){ | ||
| 343 | + //todo:消息备份或者重发? | ||
| 344 | + } | ||
| 345 | + } | ||
| 346 | + | ||
| 347 | + | ||
| 348 | + | ||
| 349 | + | ||
| 350 | + return data; | ||
| 351 | + | ||
| 352 | + } else { | ||
| 353 | + log.error("消息获取失败"); | ||
| 354 | + return new JSONArray(); | ||
| 355 | + } | ||
| 356 | + } | ||
| 357 | + | ||
| 358 | + /** | ||
| 359 | + * 读取备份消息并消息重发 | ||
| 360 | + * @return | ||
| 361 | + */ | ||
| 362 | + public Boolean reSend(){ | ||
| 363 | + return false; | ||
| 364 | + } | ||
| 365 | + | ||
| 366 | +} | ||
| 367 | + | ||
| 368 | +/** | ||
| 369 | + * 消息发送实体类 | ||
| 370 | + */ | ||
| 371 | +class MSGS implements Serializable { | ||
| 372 | + private MSG MSG; | ||
| 373 | + | ||
| 374 | + public MSG getMSG() { | ||
| 375 | + return MSG; | ||
| 376 | + } | ||
| 377 | + | ||
| 378 | + public void setMSG(MSG MSG) { | ||
| 379 | + this.MSG = MSG; | ||
| 380 | + } | ||
| 381 | +} | ||
| 382 | + | ||
| 383 | +class MSG { | ||
| 384 | + /** | ||
| 385 | + * 具体消息头部信息 | ||
| 386 | + */ | ||
| 387 | + private HEADER HEADER; | ||
| 388 | + /** | ||
| 389 | + * 具体消息支持JSON字符串或者XML | ||
| 390 | + */ | ||
| 391 | + private String BODY; | ||
| 392 | + | ||
| 393 | + public HEADER getHEADER() { | ||
| 394 | + return HEADER; | ||
| 395 | + } | ||
| 396 | + | ||
| 397 | + public void setHEADER(HEADER HEADER) { | ||
| 398 | + this.HEADER = HEADER; | ||
| 399 | + } | ||
| 400 | + | ||
| 401 | + public String getBODY() { | ||
| 402 | + return BODY; | ||
| 403 | + } | ||
| 404 | + | ||
| 405 | + public void setBODY(String BODY) { | ||
| 406 | + this.BODY = BODY; | ||
| 407 | + } | ||
| 408 | +} | ||
| 409 | + | ||
| 410 | +/** | ||
| 411 | + * 消息发送头部信息 | ||
| 412 | + */ | ||
| 413 | +class HEADER { | ||
| 414 | + /** | ||
| 415 | + * 消息唯一标识,可以是ID | ||
| 416 | + */ | ||
| 417 | + private long SEQNO; | ||
| 418 | + /** | ||
| 419 | + * 发送的消息大类,在总线系统配置好后,分配给消息生产者 | ||
| 420 | + */ | ||
| 421 | + private String TYPE; | ||
| 422 | + /** | ||
| 423 | + * 发送的消息子类,在总线系统配置好后,分配给消息生产者 | ||
| 424 | + */ | ||
| 425 | + private String STYPE; | ||
| 426 | + /** | ||
| 427 | + * 消息增删改类型(IE=insert event,UE=update event,DE=delete event) | ||
| 428 | + */ | ||
| 429 | + private String OPTYPE; | ||
| 430 | + /** | ||
| 431 | + * 发送时间(如:20210320101421/yyyyMMddHHmmss) | ||
| 432 | + */ | ||
| 433 | + private String DDTM; | ||
| 434 | + /** | ||
| 435 | + * 你的账号名称 | ||
| 436 | + */ | ||
| 437 | + private String SNDR; | ||
| 438 | + /** | ||
| 439 | + * 消息接收者 | ||
| 440 | + */ | ||
| 441 | + private String RCVR; | ||
| 442 | + | ||
| 443 | + public long getSEQNO() { | ||
| 444 | + return SEQNO; | ||
| 445 | + } | ||
| 446 | + | ||
| 447 | + public void setSEQNO(long SEQNO) { | ||
| 448 | + this.SEQNO = SEQNO; | ||
| 449 | + } | ||
| 450 | + | ||
| 451 | + public String getTYPE() { | ||
| 452 | + return TYPE; | ||
| 453 | + } | ||
| 454 | + | ||
| 455 | + public void setTYPE(String TYPE) { | ||
| 456 | + this.TYPE = TYPE; | ||
| 457 | + } | ||
| 458 | + | ||
| 459 | + public String getSTYPE() { | ||
| 460 | + return STYPE; | ||
| 461 | + } | ||
| 462 | + | ||
| 463 | + public void setSTYPE(String STYPE) { | ||
| 464 | + this.STYPE = STYPE; | ||
| 465 | + } | ||
| 466 | + | ||
| 467 | + public String getOPTYPE() { | ||
| 468 | + return OPTYPE; | ||
| 469 | + } | ||
| 470 | + | ||
| 471 | + public void setOPTYPE(String OPTYPE) { | ||
| 472 | + this.OPTYPE = OPTYPE; | ||
| 473 | + } | ||
| 474 | + | ||
| 475 | + public String getDDTM() { | ||
| 476 | + return DDTM; | ||
| 477 | + } | ||
| 478 | + | ||
| 479 | + public void setDDTM(String DDTM) { | ||
| 480 | + this.DDTM = DDTM; | ||
| 481 | + } | ||
| 482 | + | ||
| 483 | + public String getSNDR() { | ||
| 484 | + return SNDR; | ||
| 485 | + } | ||
| 486 | + | ||
| 487 | + public void setSNDR(String SNDR) { | ||
| 488 | + this.SNDR = SNDR; | ||
| 489 | + } | ||
| 490 | + | ||
| 491 | + public String getRCVR() { | ||
| 492 | + return RCVR; | ||
| 493 | + } | ||
| 494 | + | ||
| 495 | + public void setRCVR(String RCVR) { | ||
| 496 | + this.RCVR = RCVR; | ||
| 497 | + } | ||
| 498 | +} | ||
| 499 | + | ||
| 500 | +/** | ||
| 501 | + * 收发送接口返回结果实体类 | ||
| 502 | + */ | ||
| 503 | + | ||
| 504 | +class ResultJson<T> implements Serializable { | ||
| 505 | + private static final long serialVersionUID = 1L; | ||
| 506 | + | ||
| 507 | + /** | ||
| 508 | + * 状态码 正确为200,其他为异常 | ||
| 509 | + */ | ||
| 510 | + private String code; | ||
| 511 | + /** | ||
| 512 | + * 结果描述 | ||
| 513 | + */ | ||
| 514 | + private String msg; | ||
| 515 | + | ||
| 516 | + /** | ||
| 517 | + * 结果数据 | ||
| 518 | + */ | ||
| 519 | + private T data; | ||
| 520 | +} |
-
请 注册 或 登录 后发表评论