Selaa lähdekoodia

feat:搭建Eureka Server集群和Eureka Client集群

yang yi 1 vuosi sitten
vanhempi
sitoutus
fea78ced66

+ 2 - 0
.gitignore

@@ -55,3 +55,5 @@
 !/member-service-provider_10000
 !/member-service-consumer
 !/eureka-server_9001
+!/eureka-server_9002
+!/member-service-provider_10002

+ 6 - 6
eureka-server_9001/src/main/resources/application.yaml

@@ -3,19 +3,19 @@ server:
 spring:
   application:
     name: eureka-server
-
 eureka:
   instance:
 #Eureka服务端的实例名称
     hostname: localhost
   client:
-#配置向服务中注册自己
-    register-with-eureka: false
-#配置向服务中抓取注册信息,因为自己就是服务端
-    fetch-registry: false
+#配置向服务中注册自己,搭建集群
+    register-with-eureka: true
+#配置向服务中抓取注册信息,因为自己就是服务端
+    fetch-registry: true
 #配置服务注册中心的地址
     service-url:
-      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
+      #向Eureka Server 9002相互注册
+      defaultZone: http://localhost:9002/eureka
   server:
     #设置自我保护机制,默认开启
     enable-self-preservation: true

+ 29 - 0
eureka-server_9002/pom.xml

@@ -0,0 +1,29 @@
+<?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">
+    <parent>
+        <artifactId>distributedSystemLearn</artifactId>
+        <groupId>anyi.space</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>eureka-server_9002</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 20 - 0
eureka-server_9002/src/main/java/anyi/space/eurekaServer/EurekaServerApplication.java

@@ -0,0 +1,20 @@
+package anyi.space.eurekaServer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+/**
+ * @ProjectName: distributedSystemLearn
+ * @FileName: EurekaServer
+ * @Author: 杨逸
+ * @Data:2025/4/15 20:10
+ * @Description:
+ */
+@EnableEurekaServer
+@SpringBootApplication
+public class EurekaServerApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(EurekaServerApplication.class, args);
+    }
+}

+ 23 - 0
eureka-server_9002/src/main/resources/application.yaml

@@ -0,0 +1,23 @@
+server:
+  port: 9002
+spring:
+  application:
+    name: eureka-server
+eureka:
+  instance:
+#Eureka服务端的实例名称
+    hostname: localhost
+  client:
+#配置向服务中注册自己,搭建集群
+    register-with-eureka: true
+#配置向服务中抓取注册信息,因为自己就是服务端
+    fetch-registry: true
+#配置服务注册中心的地址
+    service-url:
+      #向Eureka Server 9001相互注册
+      defaultZone: http://localhost:9001/eureka
+  server:
+    #设置自我保护机制,默认开启
+    enable-self-preservation: true
+    #心跳机制时间间隔(单位毫秒,默认是30*1000)
+    eviction-interval-timer-in-ms: 2000

+ 2 - 1
member-service-provider_10000/src/main/resources/application.yaml

@@ -31,4 +31,5 @@ eureka:
     fetch-registry: true
     #Eureka Server的地址
     service-url:
-      defaultZone: http://localhost:9001/eureka/
+      #配置两个Eureka Server的地址,用逗号分割
+      defaultZone: http://localhost:9001/eureka/,http://localhost:9002/eureka/

+ 55 - 0
member-service-provider_10002/pom.xml

@@ -0,0 +1,55 @@
+<?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">
+    <parent>
+        <artifactId>distributedSystemLearn</artifactId>
+        <groupId>anyi.space</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>member-service-provider_10002</artifactId>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+    </properties>
+    <dependencies>
+        <!--引入eureka-client依赖-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>anyi.space</groupId>
+            <artifactId>common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 20 - 0
member-service-provider_10002/src/main/java/anyi/space/memberServer/MemberServiceApplication.java

@@ -0,0 +1,20 @@
+package anyi.space.memberServer;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+/**
+ * @ProjectName: distributedSystemLearn
+ * @FileName: MemberServiceApplication
+ * @Author: 杨逸
+ * @Data:2025/4/15 20:29
+ * @Description:
+ */
+@EnableEurekaClient
+@SpringBootApplication
+public class MemberServiceApplication {
+    public static void main(String[] args) {
+        SpringApplication.run(MemberServiceApplication.class, args);
+    }
+}

+ 36 - 0
member-service-provider_10002/src/main/java/anyi/space/memberServer/controller/MemberController.java

@@ -0,0 +1,36 @@
+package anyi.space.memberServer.controller;
+
+import anyi.sapce.common.entity.Member;
+import anyi.sapce.common.entity.ResponseResult;
+import anyi.space.memberServer.service.MemberService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * @ProjectName: distributedSystemLearn
+ * @FileName: MemberController
+ * @Author: 杨逸
+ * @Data:2025/4/13 18:55
+ * @Description:
+ */
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/member")
+public class MemberController {
+    private final MemberService memberService;
+    @GetMapping
+    public ResponseResult<Member> getMemberById(Integer id){
+        Member member = memberService.getById(id);
+        return ResponseResult.okResult(member);
+    }
+    @PostMapping
+    public ResponseResult addMember(@RequestBody Member member){
+        String hex = DigestUtils.md5DigestAsHex(member.getPwd().getBytes(StandardCharsets.UTF_8));
+        member.setPwd(hex);
+        boolean save = memberService.save(member);
+        return ResponseResult.okResult(save);
+    }
+}

+ 20 - 0
member-service-provider_10002/src/main/java/anyi/space/memberServer/mapper/MemberMapper.java

@@ -0,0 +1,20 @@
+package anyi.space.memberServer.mapper;
+
+import anyi.sapce.common.entity.Member;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author 杨逸
+* @description 针对表【member】的数据库操作Mapper
+* @createDate 2025-04-13 18:44:39
+* @Entity anyi.space.merberServer.entity.Member
+*/
+@Mapper
+public interface MemberMapper extends BaseMapper<Member> {
+
+}
+
+
+
+

+ 13 - 0
member-service-provider_10002/src/main/java/anyi/space/memberServer/service/MemberService.java

@@ -0,0 +1,13 @@
+package anyi.space.memberServer.service;
+
+import anyi.sapce.common.entity.Member;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author 杨逸
+* @description 针对表【member】的数据库操作Service
+* @createDate 2025-04-13 18:44:39
+*/
+public interface MemberService extends IService<Member> {
+
+}

+ 22 - 0
member-service-provider_10002/src/main/java/anyi/space/memberServer/service/impl/MemberServiceImpl.java

@@ -0,0 +1,22 @@
+package anyi.space.memberServer.service.impl;
+
+import anyi.sapce.common.entity.Member;
+import anyi.space.memberServer.mapper.MemberMapper;
+import anyi.space.memberServer.service.MemberService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+* @author 杨逸
+* @description 针对表【member】的数据库操作Service实现
+* @createDate 2025-04-13 18:44:39
+*/
+@Service
+public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member>
+    implements MemberService{
+
+}
+
+
+
+

+ 35 - 0
member-service-provider_10002/src/main/resources/application.yaml

@@ -0,0 +1,35 @@
+server:
+  application:
+    name: member-service-provider
+  port: 10002
+  servlet:
+    context-path: /member-provider
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      url: jdbc:mysql://localhost:3306/spring_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
+      username: root
+      password: hsp
+      driver-class-name: com.mysql.jdbc.Driver
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+eureka:
+  instance:
+    #配置注册到Eureka Server中的名称
+    appname: member-service-provider
+    #心跳检测和续约的间隔时间
+    #Eureka Client向Eureka Server发送心跳信息的间隔时间
+    lease-renewal-interval-in-seconds: 30
+    #Eureka Server在收到最后一次心跳后等待的时间上限,超时将剔除该服务实例,默认是90秒
+    lease-expiration-duration-in-seconds: 90
+  client:
+    #是否将自己注册到Eureka Server中
+    register-with-eureka: true
+    #是否从Eureka Server中获取注册信息,单节点不拉取也可以,集群部署时,需要拉取服务注册信息才能实现负载均衡
+    fetch-registry: true
+    #Eureka Server的地址
+    service-url:
+      #配置两个Eureka Server的地址,用逗号分割
+      defaultZone: http://localhost:9001/eureka/,http://localhost:9002/eureka/

+ 19 - 0
member-service-provider_10002/src/main/resources/mapper/MemberMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="anyi.space.memberServer.mapper.MemberMapper">
+    <resultMap id="BaseResultMap" type="anyi.sapce.common.entity.Member">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="NAME" jdbcType="VARCHAR"/>
+            <result property="pwd" column="pwd" jdbcType="CHAR"/>
+            <result property="mobile" column="mobile" jdbcType="VARCHAR"/>
+            <result property="email" column="email" jdbcType="VARCHAR"/>
+            <result property="gender" column="gender" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,NAME,pwd,
+        mobile,email,gender
+    </sql>
+</mapper>

+ 2 - 0
pom.xml

@@ -12,6 +12,8 @@
         <module>member-service-consumer</module>
         <module>common</module>
         <module>eureka-server_9001</module>
+        <module>eureka-server_9002</module>
+        <module>member-service-provider_10002</module>
     </modules>
     <packaging>pom</packaging>