孙超林 1 tuần trước cách đây
commit
6e4ed4f203
53 tập tin đã thay đổi với 878 bổ sung0 xóa
  1. 89 0
      chao/pom.xml
  2. 13 0
      chao/src/main/java/com/zt/ChaoApplication.java
  3. 47 0
      chao/src/main/java/com/zt/controller/Diff.java
  4. 37 0
      chao/src/main/java/com/zt/util/OrderId.java
  5. 2 0
      chao/src/main/resources/application.yml
  6. 6 0
      chao/src/main/resources/static/index.html
  7. 2 0
      chao/target/classes/application.yml
  8. BIN
      chao/target/classes/com/zt/ChaoApplication.class
  9. BIN
      chao/target/classes/com/zt/controller/Diff.class
  10. BIN
      chao/target/classes/com/zt/util/OrderId.class
  11. 6 0
      chao/target/classes/static/index.html
  12. 85 0
      consumer/pom.xml
  13. 13 0
      consumer/src/main/java/com/zt/ConsumerApplication.java
  14. 18 0
      consumer/src/main/java/com/zt/commons/KafkaMessage.java
  15. 14 0
      consumer/src/main/java/com/zt/config/KafkaConsumerConfig.java
  16. 13 0
      consumer/src/main/java/com/zt/task/KafkaMessageConsumer.java
  17. 23 0
      consumer/src/main/resources/application.yml
  18. 6 0
      consumer/src/main/resources/static/index.html
  19. 23 0
      consumer/target/classes/application.yml
  20. BIN
      consumer/target/classes/com/zt/ConsumerApplication.class
  21. BIN
      consumer/target/classes/com/zt/commons/KafkaMessage.class
  22. BIN
      consumer/target/classes/com/zt/config/KafkaConsumerConfig.class
  23. BIN
      consumer/target/classes/com/zt/task/KafkaMessageConsumer.class
  24. 6 0
      consumer/target/classes/static/index.html
  25. 86 0
      lin/pom.xml
  26. 13 0
      lin/src/main/java/com/zt/LinApplication.java
  27. 22 0
      lin/src/main/java/com/zt/controller/Controller.java
  28. 25 0
      lin/src/main/java/com/zt/result/ResultVo.java
  29. 12 0
      lin/src/main/java/com/zt/service/TestService.java
  30. 41 0
      lin/src/main/java/com/zt/service/impl/TestServiceImpl.java
  31. 2 0
      lin/src/main/resources/application.yml
  32. 6 0
      lin/src/main/resources/static/index.html
  33. 2 0
      lin/target/classes/application.yml
  34. BIN
      lin/target/classes/com/zt/LinApplication.class
  35. BIN
      lin/target/classes/com/zt/controller/Controller.class
  36. BIN
      lin/target/classes/com/zt/result/ResultVo.class
  37. BIN
      lin/target/classes/com/zt/service/TestService.class
  38. BIN
      lin/target/classes/com/zt/service/impl/TestServiceImpl.class
  39. 6 0
      lin/target/classes/static/index.html
  40. 24 0
      pom.xml
  41. 85 0
      producer/pom.xml
  42. 15 0
      producer/src/main/java/com/zt/ProducerApplication.java
  43. 20 0
      producer/src/main/java/com/zt/commons/KafkaMessage.java
  44. 33 0
      producer/src/main/java/com/zt/config/KafkaProducerConfig.java
  45. 25 0
      producer/src/main/java/com/zt/task/KafkaMessageProducer.java
  46. 23 0
      producer/src/main/resources/application.yml
  47. 6 0
      producer/src/main/resources/static/index.html
  48. 23 0
      producer/target/classes/application.yml
  49. BIN
      producer/target/classes/com/zt/ProducerApplication.class
  50. BIN
      producer/target/classes/com/zt/commons/KafkaMessage.class
  51. BIN
      producer/target/classes/com/zt/config/KafkaProducerConfig.class
  52. BIN
      producer/target/classes/com/zt/task/KafkaMessageProducer.class
  53. 6 0
      producer/target/classes/static/index.html

+ 89 - 0
chao/pom.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.zt</groupId>
+        <artifactId>scl</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>chao</artifactId>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.15</version>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.yang.YangApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
chao/src/main/java/com/zt/ChaoApplication.java

@@ -0,0 +1,13 @@
+package com.zt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ChaoApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ChaoApplication.class, args);
+    }
+
+}

+ 47 - 0
chao/src/main/java/com/zt/controller/Diff.java

@@ -0,0 +1,47 @@
+package com.zt.controller;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.springframework.util.DigestUtils;
+
+import java.util.Map;
+import java.util.TreeMap;
+
+public class Diff {
+    private static final String APP_ID = "test_app";
+    private static final String APP_SECRET = "123";
+    private static final String API_URL = "http://localhost:9002/api/hello";
+    public static void main(String[] args) {
+        Long goodsId = 123L;
+        String reqId = "req_123";
+        Long reqTime = System.currentTimeMillis();
+        Map<String, String> params = new TreeMap<>(); // TreeMap自动按key排序
+        params.put("goodsId", goodsId.toString());
+        params.put("reqId", reqId);
+        params.put("reqTime", reqTime.toString());
+        params.put("appId", APP_ID);
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<String,String> entry:params.entrySet()) {
+            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
+        }
+        sb.append(APP_SECRET);
+        String sign = DigestUtils.md5DigestAsHex(sb.toString().getBytes());
+        HttpResponse response = HttpRequest.get(API_URL + "?goodsId=" + goodsId)
+                .header("reqId", reqId)
+                .header("reqTime", reqTime.toString())
+                .header("appId", APP_ID)
+                .header("sign", sign)
+                .execute();
+            JSONObject json = JSONUtil.parseObj(response.body());
+        String status = json.getStr("status");
+        if ("200".equals(status)) {
+            System.out.println("响应结果: " + json);
+            System.out.println("商品名称: " + json.getStr("data"));
+        }else {
+            System.err.println("响应结果: " + json);
+            System.err.println("请求失败,状态码: " + status);
+        }
+    }
+}

+ 37 - 0
chao/src/main/java/com/zt/util/OrderId.java

@@ -0,0 +1,37 @@
+package com.zt.util;
+
+
+import redis.clients.jedis.Jedis;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+
+public class OrderId {
+    private static final String REDIS_HOST = "localhost";
+    private static final int REDIS_PORT = 6379;
+    private static final String ORDER_KEY_PREFIX = "order:counter:";
+    private static final int ORDER_SEQ_LENGTH = 5;
+
+    public static void main(String[] args) {
+        String orderNumber = generateOrderNumber("ORD");
+        String orderNumber2 = generateOrderNumber("ORD");
+        System.out.println("生成的订单号: " + orderNumber);
+        System.out.println("生成的订单号: " + orderNumber2);
+    }
+
+    public static String generateOrderNumber(String prefix) {
+            Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
+            // 获取当前日期,格式化为yyMMdd
+            String datePart = LocalDateTime.now()
+                    .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+            // Redis键名,按日期分隔计数器
+            String redisKey = ORDER_KEY_PREFIX + datePart;
+            // 原子递增并获取序列号
+            long seq = jedis.incr(redisKey);
+            // 格式化序列号,不足长度时前补零
+            String seqPart = String.format("%0" + ORDER_SEQ_LENGTH + "d", seq);
+            // 组合完整订单号: 前缀+日期+序列号
+            return prefix + datePart + seqPart;
+    }
+}

+ 2 - 0
chao/src/main/resources/application.yml

@@ -0,0 +1,2 @@
+server:
+  port: 9003

+ 6 - 0
chao/src/main/resources/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 2 - 0
chao/target/classes/application.yml

@@ -0,0 +1,2 @@
+server:
+  port: 9003

BIN
chao/target/classes/com/zt/ChaoApplication.class


BIN
chao/target/classes/com/zt/controller/Diff.class


BIN
chao/target/classes/com/zt/util/OrderId.class


+ 6 - 0
chao/target/classes/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 85 - 0
consumer/pom.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.zt</groupId>
+        <artifactId>scl</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>consumer</artifactId>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.kafka</groupId>
+            <artifactId>spring-kafka</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.zt.ConsumerApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
consumer/src/main/java/com/zt/ConsumerApplication.java

@@ -0,0 +1,13 @@
+package com.zt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class  ConsumerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ConsumerApplication.class, args);
+    }
+
+}

+ 18 - 0
consumer/src/main/java/com/zt/commons/KafkaMessage.java

@@ -0,0 +1,18 @@
+package com.zt.commons;
+
+import lombok.Data;
+
+@Data
+public class KafkaMessage {
+    private String msgId;
+    private String msgType;
+    private String content;
+    public KafkaMessage() {
+
+    }
+    public KafkaMessage(String msgId, String msgType, String content) {
+        this.msgId = msgId;
+        this.msgType = msgType;
+        this.content = content;
+    }
+}

+ 14 - 0
consumer/src/main/java/com/zt/config/KafkaConsumerConfig.java

@@ -0,0 +1,14 @@
+package com.zt.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.kafka.support.converter.JsonMessageConverter;
+import org.springframework.kafka.support.converter.RecordMessageConverter;
+
+@Configuration
+public class KafkaConsumerConfig {
+    @Bean
+    public RecordMessageConverter converter() {
+        return new JsonMessageConverter();
+    }
+}

+ 13 - 0
consumer/src/main/java/com/zt/task/KafkaMessageConsumer.java

@@ -0,0 +1,13 @@
+package com.zt.task;
+
+import com.zt.commons.KafkaMessage;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class KafkaMessageConsumer {
+    @KafkaListener(topics = "test-topic",groupId = "test-group")
+    public void consume(KafkaMessage message){
+        System.out.println("收到消息: " + message);
+    }
+}

+ 23 - 0
consumer/src/main/resources/application.yml

@@ -0,0 +1,23 @@
+server:
+  port: 9001
+spring:
+  kafka:
+    # 通用配置
+    bootstrap-servers: localhost:9092
+
+    # 生产者配置
+#    producer:
+#      key-serializer: org.apache.kafka.common.serialization.StringSerializer
+#      value-serializer: org.apache.kafka.common.serialization.StringSerializer
+#      acks: all
+#      retries: 3
+#      batch-size: 16384
+#      buffer-memory: 33554432
+
+    # 消费者配置
+    consumer:
+      group-id: my-group
+      auto-offset-reset: earliest
+      enable-auto-commit: false
+      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

+ 6 - 0
consumer/src/main/resources/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 23 - 0
consumer/target/classes/application.yml

@@ -0,0 +1,23 @@
+server:
+  port: 9001
+spring:
+  kafka:
+    # 通用配置
+    bootstrap-servers: localhost:9092
+
+    # 生产者配置
+#    producer:
+#      key-serializer: org.apache.kafka.common.serialization.StringSerializer
+#      value-serializer: org.apache.kafka.common.serialization.StringSerializer
+#      acks: all
+#      retries: 3
+#      batch-size: 16384
+#      buffer-memory: 33554432
+
+    # 消费者配置
+    consumer:
+      group-id: my-group
+      auto-offset-reset: earliest
+      enable-auto-commit: false
+      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

BIN
consumer/target/classes/com/zt/ConsumerApplication.class


BIN
consumer/target/classes/com/zt/commons/KafkaMessage.class


BIN
consumer/target/classes/com/zt/config/KafkaConsumerConfig.class


BIN
consumer/target/classes/com/zt/task/KafkaMessageConsumer.class


+ 6 - 0
consumer/target/classes/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 86 - 0
lin/pom.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.zt</groupId>
+        <artifactId>scl</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>lin</artifactId>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.15</version>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.zang.ZangApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 13 - 0
lin/src/main/java/com/zt/LinApplication.java

@@ -0,0 +1,13 @@
+package com.zt; //
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class LinApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(LinApplication.class, args);
+    }
+
+}

+ 22 - 0
lin/src/main/java/com/zt/controller/Controller.java

@@ -0,0 +1,22 @@
+package com.zt.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zt.result.ResultVo;
+import com.zt.service.TestService;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/api")
+public class Controller {
+    @Resource
+    private TestService service;
+    @RequestMapping("hello")
+    public ResultVo hello(Integer goodsId, HttpServletRequest request) {
+        ResultVo resultVo = service.checkSign(goodsId,request);
+        return resultVo;
+    }
+}

+ 25 - 0
lin/src/main/java/com/zt/result/ResultVo.java

@@ -0,0 +1,25 @@
+package com.zt.result;
+
+import lombok.Data;
+
+@Data
+public class ResultVo {
+    private Integer status;
+    private String msg;
+    private Object Data;
+    public static ResultVo success(String msg, Object object) {
+        ResultVo result = new ResultVo();
+        result.setStatus(200);
+        result.setMsg(msg);
+        result.setData(object);
+        return result;
+    }
+
+    public static ResultVo failed(String msg, Object object) {
+        ResultVo result = new ResultVo();
+        result.setStatus(1002);
+        result.setMsg(msg);
+        result.setData(object);
+        return result;
+    }
+}

+ 12 - 0
lin/src/main/java/com/zt/service/TestService.java

@@ -0,0 +1,12 @@
+package com.zt.service;
+
+
+
+
+import com.zt.result.ResultVo;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface TestService {
+    ResultVo checkSign(Integer goodsId, HttpServletRequest request);
+}

+ 41 - 0
lin/src/main/java/com/zt/service/impl/TestServiceImpl.java

@@ -0,0 +1,41 @@
+package com.zt.service.impl;
+
+
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+import com.zt.result.ResultVo;
+import com.zt.service.TestService;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.TreeMap;
+
+@Service
+public class TestServiceImpl implements TestService {
+    private static final String APP_SECRET = "123";
+    @Override
+    public ResultVo checkSign(Integer goodsId, HttpServletRequest request) {
+        String reqId = request.getHeader("reqId");
+        String reqTime = request.getHeader("reqTime");
+        String appId = request.getHeader("appId");
+        String sign = request.getHeader("sign");
+        Map<String, String> map = new TreeMap<>();
+        map.put("goodsId", goodsId.toString());
+        map.put("reqId", reqId);
+        map.put("reqTime", reqTime.toString());
+        map.put("appId", appId);
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<String, String> entry : map.entrySet()) {
+            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
+        }
+        sb.append(APP_SECRET); // 最后拼接appSecret
+        String s = DigestUtils.md5DigestAsHex(sb.toString().getBytes());
+        if (!s.equalsIgnoreCase(sign)) {
+            System.err.println("签名验证失败");
+            return ResultVo.failed("签名验证失败",null);
+        }
+        System.err.println("签名验证成功");
+        // 5. 返回成功结果
+        return ResultVo.success("调用成功",sb.toString());
+    }
+}

+ 2 - 0
lin/src/main/resources/application.yml

@@ -0,0 +1,2 @@
+server:
+  port: 9002

+ 6 - 0
lin/src/main/resources/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 2 - 0
lin/target/classes/application.yml

@@ -0,0 +1,2 @@
+server:
+  port: 9002

BIN
lin/target/classes/com/zt/LinApplication.class


BIN
lin/target/classes/com/zt/controller/Controller.class


BIN
lin/target/classes/com/zt/result/ResultVo.class


BIN
lin/target/classes/com/zt/service/TestService.class


BIN
lin/target/classes/com/zt/service/impl/TestServiceImpl.class


+ 6 - 0
lin/target/classes/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 24 - 0
pom.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.zt</groupId>
+    <artifactId>scl</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <modules>
+        <module>consumer</module>
+        <module>producer</module>
+        <module>chao</module>
+        <module>lin</module>
+    </modules>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    
+</project>

+ 85 - 0
producer/pom.xml

@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.zt</groupId>
+        <artifactId>scl</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>producer</artifactId>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <spring-boot.version>2.6.13</spring-boot.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.kafka</groupId>
+            <artifactId>spring-kafka</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+                <configuration>
+                    <mainClass>com.zt.ProducerApplication</mainClass>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>repackage</id>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 15 - 0
producer/src/main/java/com/zt/ProducerApplication.java

@@ -0,0 +1,15 @@
+package com.zt;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableScheduling
+public class ProducerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(ProducerApplication.class, args);
+    }
+
+}

+ 20 - 0
producer/src/main/java/com/zt/commons/KafkaMessage.java

@@ -0,0 +1,20 @@
+package com.zt.commons;
+
+import lombok.Data;
+
+@Data
+public class KafkaMessage {
+    private String msgId;
+    private String msgType;
+    private String content;
+
+    // constructors, getters and setters
+    public KafkaMessage() {
+    }
+
+    public KafkaMessage(String msgId, String msgType, String content) {
+        this.msgId = msgId;
+        this.msgType = msgType;
+        this.content = content;
+    }
+}

+ 33 - 0
producer/src/main/java/com/zt/config/KafkaProducerConfig.java

@@ -0,0 +1,33 @@
+package com.zt.config;
+
+import com.zt.commons.KafkaMessage;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.kafka.common.serialization.StringSerializer;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.kafka.core.DefaultKafkaProducerFactory;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.kafka.core.ProducerFactory;
+import org.springframework.kafka.support.serializer.JsonSerializer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class KafkaProducerConfig {
+    @Value("${spring.kafka.bootstrap-servers}")
+    private String bootstrapServers;
+    @Bean
+    public ProducerFactory<String, KafkaMessage> producerFactory(){
+        Map<String,Object> configProps=new HashMap<>();
+        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
+        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
+        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
+        return new DefaultKafkaProducerFactory<>(configProps);
+    }
+    @Bean
+    public KafkaTemplate<String,KafkaMessage> kafkaTemplate(){
+        return new KafkaTemplate<>(producerFactory());
+    }
+}

+ 25 - 0
producer/src/main/java/com/zt/task/KafkaMessageProducer.java

@@ -0,0 +1,25 @@
+package com.zt.task;
+
+import com.zt.commons.KafkaMessage;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.UUID;
+
+@Component
+public class KafkaMessageProducer {
+    private final KafkaTemplate<String, KafkaMessage> kafkaTemplate;
+    private static final String TOPIC = "test-topic";
+
+    public KafkaMessageProducer(KafkaTemplate<String, KafkaMessage> kafkaTemplate) {
+        this.kafkaTemplate = kafkaTemplate;
+    }
+    @Scheduled(fixedRate = 60000)
+    public void sendMessage(){
+        String msgId = UUID.randomUUID().toString();
+        KafkaMessage message=new KafkaMessage(msgId,"scheduled_msg","定时消息内容,时间: " + System.currentTimeMillis());
+        kafkaTemplate.send(TOPIC,message);
+        System.out.println("发送消息: " + message);
+    }
+}

+ 23 - 0
producer/src/main/resources/application.yml

@@ -0,0 +1,23 @@
+server:
+  port: 9000
+spring:
+  kafka:
+    # 通用配置
+    bootstrap-servers: localhost:9092
+
+    # 生产者配置
+    producer:
+      key-serializer: org.apache.kafka.common.serialization.StringSerializer
+      value-serializer: org.apache.kafka.common.serialization.StringSerializer
+      acks: all
+      retries: 3
+      batch-size: 16384
+      buffer-memory: 33554432
+
+    # 消费者配置
+#    consumer:
+#      group-id: my-group
+#      auto-offset-reset: earliest
+#      enable-auto-commit: false
+#      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+#      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

+ 6 - 0
producer/src/main/resources/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>

+ 23 - 0
producer/target/classes/application.yml

@@ -0,0 +1,23 @@
+server:
+  port: 9000
+spring:
+  kafka:
+    # 通用配置
+    bootstrap-servers: localhost:9092
+
+    # 生产者配置
+    producer:
+      key-serializer: org.apache.kafka.common.serialization.StringSerializer
+      value-serializer: org.apache.kafka.common.serialization.StringSerializer
+      acks: all
+      retries: 3
+      batch-size: 16384
+      buffer-memory: 33554432
+
+    # 消费者配置
+#    consumer:
+#      group-id: my-group
+#      auto-offset-reset: earliest
+#      enable-auto-commit: false
+#      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+#      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

BIN
producer/target/classes/com/zt/ProducerApplication.class


BIN
producer/target/classes/com/zt/commons/KafkaMessage.class


BIN
producer/target/classes/com/zt/config/KafkaProducerConfig.class


BIN
producer/target/classes/com/zt/task/KafkaMessageProducer.class


+ 6 - 0
producer/target/classes/static/index.html

@@ -0,0 +1,6 @@
+<html>
+<body>
+<h1>hello word!!!</h1>
+<p>this is a html page</p>
+</body>
+</html>