From 549b0736b64175efd7ae29bf8f6312604ca754fb Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Wed, 17 Nov 2021 18:08:19 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD](master):?= =?UTF-8?q?=20=E5=88=9D=E5=A7=8B=E5=8C=96=E5=90=8E=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新了log的 初始化配置代码 --- .gitignore | 46 +++++++++++++++ README.md | 39 +++++++++++++ dev-protocol-log/.gitignore | 46 +++++++++++++++ dev-protocol-log/pom.xml | 44 ++++++++++++++ .../com/baiye/DevProtocolLogApplication.java | 17 ++++++ .../java/com/baiye/kafka/KafkaConsumer.java | 47 +++++++++++++++ .../java/com/baiye/kafka/KafkaProducer.java | 45 ++++++++++++++ .../src/main/resources/application.yml | 58 +++++++++++++++++++ dev-protocol-test/.gitignore | 46 +++++++++++++++ dev-protocol-test/pom.xml | 34 +++++++++++ .../com/baiye/service/DemoTestService.java | 14 +++++ .../service/impl/DemoTestServiceImpl.java | 10 ++++ .../service/impl/DemoTestServiceImplTest.java | 31 ++++++++++ pom.xml | 37 ++++++++++++ 14 files changed, 514 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 dev-protocol-log/.gitignore create mode 100644 dev-protocol-log/pom.xml create mode 100644 dev-protocol-log/src/main/java/com/baiye/DevProtocolLogApplication.java create mode 100644 dev-protocol-log/src/main/java/com/baiye/kafka/KafkaConsumer.java create mode 100644 dev-protocol-log/src/main/java/com/baiye/kafka/KafkaProducer.java create mode 100644 dev-protocol-log/src/main/resources/application.yml create mode 100644 dev-protocol-test/.gitignore create mode 100644 dev-protocol-test/pom.xml create mode 100644 dev-protocol-test/src/main/java/com/baiye/service/DemoTestService.java create mode 100644 dev-protocol-test/src/main/java/com/baiye/service/impl/DemoTestServiceImpl.java create mode 100644 dev-protocol-test/src/test/java/com/baiye/service/impl/DemoTestServiceImplTest.java create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4beec9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b80e68 --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +

百业代码规范及一些标准化过程示例 v0.1.1

+ + +## 0. 项目说明 + 对后端java代码进行一些标准化的过程说明,帮助整个技术团队提升自己的技术规范及水平 + +## 1. 项目内容说明 + + dev-protocol-test + - SpringBoot项目Test的编写规范及使用标准 + - 参考: https://mp.weixin.qq.com/s/W5v8zOCHbc2_NvobMGaU8w + dev-protocol-log + - 分布式日志系统的设计及实现,主要涉及kafka Springboot ELK + + + +## 2. 基本命令 + - Kafka + 查看topic列表命令(连接其中一个就好了): + 【旧版】kafka-topics.sh --zookeeper 172.16.26.183:2181 --list + 【新版】kafka-topics.sh --bootstrap-server localhost:9092 --list + (– zookeeper is not a recognized option主要原因是 Kafka 版本过高,命令不存在) + 创建topic主题 + kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic1 --partitions 1 --replication-factor 3 + --create 命令后 --topic 为创建topic 并指定 topic name + --partitions 为指定分区数量 + --replication-factor 为指定副本集数量 + 向kafka集群发送数据 + 【无key型消息】kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topic1 + 【有key型消息】 kafka-console-producer.sh --bootstrap-server localhost:9092 --topic topic1 --property parse.key=true + (默认消息键与消息值间使用“Tab键”进行分隔,切勿使用转义字符(\t)) + kafka命令接受数据 + kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic1 --from-beginning + +## 3. 注意事项 + 必须在hosts文件中配置 /etc/hosts + 方法一:改掉/etc/sysconfig/network中hostname的值为:localhost + 方法二:在/etc/hosts中添加127.0.0.1到该hostname的映射 + \ No newline at end of file diff --git a/dev-protocol-log/.gitignore b/dev-protocol-log/.gitignore new file mode 100644 index 0000000..d4beec9 --- /dev/null +++ b/dev-protocol-log/.gitignore @@ -0,0 +1,46 @@ +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + diff --git a/dev-protocol-log/pom.xml b/dev-protocol-log/pom.xml new file mode 100644 index 0000000..3b31968 --- /dev/null +++ b/dev-protocol-log/pom.xml @@ -0,0 +1,44 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + + 4.0.0 + + dev-protocol-log + + + 8 + 8 + UTF-8 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + + + + org.springframework.kafka + spring-kafka + + + + \ No newline at end of file diff --git a/dev-protocol-log/src/main/java/com/baiye/DevProtocolLogApplication.java b/dev-protocol-log/src/main/java/com/baiye/DevProtocolLogApplication.java new file mode 100644 index 0000000..90e818b --- /dev/null +++ b/dev-protocol-log/src/main/java/com/baiye/DevProtocolLogApplication.java @@ -0,0 +1,17 @@ +package com.baiye; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 开发协议日志应用程序 + * + * @author q + * @date 2021/11/16 + */ +@SpringBootApplication +public class DevProtocolLogApplication { + public static void main(String[] args) { + SpringApplication.run(DevProtocolLogApplication.class, args); + } +} diff --git a/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaConsumer.java b/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaConsumer.java new file mode 100644 index 0000000..b82d979 --- /dev/null +++ b/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaConsumer.java @@ -0,0 +1,47 @@ +package com.baiye.kafka; + + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.support.Acknowledgment; +import org.springframework.stereotype.Component; + +/** + * 卡夫卡的消费者 + * + * @author q + * @date 2021/11/16 + */ +@Component +@Slf4j +public class KafkaConsumer { + + + @Autowired + private KafkaTemplate kafkaTemplate; + + /** + * 在消息 + * + * @param record 记录 + * @param acknowledgment ack确认 + * @param consumer 消费者 + */ + @KafkaListener(groupId = "group02", topics = "topic02") + public void onMessage(ConsumerRecord record, Acknowledgment acknowledgment, Consumer consumer){ + + // 接收到消息 + log.info(" 消费端接收消息: {}", record.toString()); + + // 手工ACK确认接收到消息 + acknowledgment.acknowledge(); + + + } + + +} diff --git a/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaProducer.java b/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaProducer.java new file mode 100644 index 0000000..336aabe --- /dev/null +++ b/dev-protocol-log/src/main/java/com/baiye/kafka/KafkaProducer.java @@ -0,0 +1,45 @@ +package com.baiye.kafka; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.support.SendResult; +import org.springframework.stereotype.Component; +import org.springframework.util.concurrent.ListenableFuture; +import org.springframework.util.concurrent.ListenableFutureCallback; + +/** + * 卡夫卡生产商 + * + * @author q + * @date 2021/11/16 + */ +@Component +@Slf4j +public class KafkaProducer { + + @Autowired + private KafkaTemplate kafkaTemplate; + + /** + * 发送消息 + * + * @param topic 主题 + * @param object 消息 + */ + public void sendMessage(String topic, Object object){ + ListenableFuture> future = kafkaTemplate.send(topic, object); + + future.addCallback(new ListenableFutureCallback>() { + @Override + public void onFailure(Throwable ex) { + log.error("发送消息失败, {} , {} " ,ex.getMessage(), ex.toString()); + } + + @Override + public void onSuccess(SendResult result) { + log.info("发送消息成功, 消息: {}", result.toString()); + } + }); + } +} diff --git a/dev-protocol-log/src/main/resources/application.yml b/dev-protocol-log/src/main/resources/application.yml new file mode 100644 index 0000000..88fd0e9 --- /dev/null +++ b/dev-protocol-log/src/main/resources/application.yml @@ -0,0 +1,58 @@ +server: + servlet: + context-path: /kafka + port: 8001 + +# Spring整合Kafka的整合选项 +spring: + kafka: + # todo 公网访问端口,这里没开 + bootstrap-servers: 121.89.208.118:9092,39.103.195.38:9092,39.103.188.57:9092 + # 生产者 + producer: + # kafka producer 发送消息失败的一个重试的次数 + retries: 0 + # 批量发送数据的配置 + batch-size: 16384 + # 设置 kafka 生产者内存缓冲区的大小(32M) + buffer-memory: 33554432 + # 设置 kafka 消息的序列化配置 + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.apache.kafka.common.serialization.StringSerializer + # kafka 生产端最重要的选项, + # acks=0 表示生产者在成功写入消息之前不会等待任何来自服务器的响应 + # acks=1 只要集群的首领节点收到消息,生产者就会收到来自服务器成功响应 + # acks=-1 表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为produce请求成功,这种方案提供最高的消息持久性保证,但理论上吞吐率也是最差的。 + acks: 1 + # 消费者 + consumer: + # todo 公网访问端口,这里没开 + bootstrap-servers: 121.89.208.118:9092,39.103.195.38:9092,39.103.188.57:9092 + # consumer 消息的签收机制: 手工签收 + enable-auto-commit: false + # 该属性制定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理 + # latest (默认值) 在偏移量无效的情况下,消费者姜葱最新的记录开始读取数据(在消费者启动之后生成的记录) + # earliest 在偏移量无效的情况下, 消费者从起始位置读取分区的记录 + auto-offset-reset: earliest + # 序列化配置 + key-deserializer: org.apache.kafka.common.serialization.StringSerializer + value-deserializer: org.apache.kafka.common.serialization.StringSerializer + listener: + # 手动ack方式进行确认 + ack-mode: manual + # 并行度 + concurrency: 5 + + + + + + + + + + + + + + diff --git a/dev-protocol-test/.gitignore b/dev-protocol-test/.gitignore new file mode 100644 index 0000000..d4beec9 --- /dev/null +++ b/dev-protocol-test/.gitignore @@ -0,0 +1,46 @@ +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + diff --git a/dev-protocol-test/pom.xml b/dev-protocol-test/pom.xml new file mode 100644 index 0000000..9ad99f8 --- /dev/null +++ b/dev-protocol-test/pom.xml @@ -0,0 +1,34 @@ + + + + dev-protocol + org.example + 1.0-SNAPSHOT + + 4.0.0 + + dev-protocol-test + + + 8 + 8 + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.junit.vintage + junit-vintage-engine + + + + + + \ No newline at end of file diff --git a/dev-protocol-test/src/main/java/com/baiye/service/DemoTestService.java b/dev-protocol-test/src/main/java/com/baiye/service/DemoTestService.java new file mode 100644 index 0000000..5572b46 --- /dev/null +++ b/dev-protocol-test/src/main/java/com/baiye/service/DemoTestService.java @@ -0,0 +1,14 @@ +package com.baiye.service; + +/** + * 演示测试服务 + * + *

ps: 一般不单独对 Dao/Model层进行单独的编写单元测试,对Service层进行测试 + * + * @author q + * @date 2021/11/12 + */ +public interface DemoTestService { + + void oneOperation(); +} diff --git a/dev-protocol-test/src/main/java/com/baiye/service/impl/DemoTestServiceImpl.java b/dev-protocol-test/src/main/java/com/baiye/service/impl/DemoTestServiceImpl.java new file mode 100644 index 0000000..5bfb64d --- /dev/null +++ b/dev-protocol-test/src/main/java/com/baiye/service/impl/DemoTestServiceImpl.java @@ -0,0 +1,10 @@ +package com.baiye.service.impl; + +import com.baiye.service.DemoTestService; + +public class DemoTestServiceImpl implements DemoTestService { + @Override + public void oneOperation() { + + } +} diff --git a/dev-protocol-test/src/test/java/com/baiye/service/impl/DemoTestServiceImplTest.java b/dev-protocol-test/src/test/java/com/baiye/service/impl/DemoTestServiceImplTest.java new file mode 100644 index 0000000..9540d3e --- /dev/null +++ b/dev-protocol-test/src/test/java/com/baiye/service/impl/DemoTestServiceImplTest.java @@ -0,0 +1,31 @@ +package com.baiye.service.impl; + + +class DemoTestServiceImplTest { + + + /* + * 常用的注解及说明 + * + * @BeforeEach:在每个单元测试方法执行前都执行一遍 + * @BeforeAll:在每个单元测试方法执行前执行一遍(只执行一次) + * @DisplayName("商品入库测试"):用于指定单元测试的名称 + * @Disabled:当前单元测试置为无效,即单元测试时跳过该测试 + * @RepeatedTest(n):重复性测试,即执行n次 + * @ParameterizedTest:参数化测试, + * @ValueSource(ints = {1, 2, 3}):参数化测试提供数据 + */ + + + + /* + 测试这种类一: 使用断言进行定义 + + JUnit Jupiter提供了强大的断言方法用以验证结果, + 在使用时需要借助java8的新特性lambda表达式,均是来自org.junit.jupiter.api.Assertions包的static方法。 + */ + + + + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fea1ca7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,37 @@ + + + 4.0.0 + + org.example + dev-protocol + pom + 1.0-SNAPSHOT + + dev-protocol-test + dev-protocol-log + + + + 8 + 8 + + 2.3.2.RELEASE + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + + + \ No newline at end of file