栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringCloud02

SpringCloud02

服务治理:管理每个服务之间的依赖关系,可以实现服务调用,负载均衡,容错,实现服务注册与发现。
注册中心:当服务启动时,就会将服务地址等相关信息存在注册中心,管理每个服务与服务之间的依赖关系。

1、Eureka

(1)介绍
包括两个组件:

Eureka Server:
服务注册:将服务信息注册进注册中心;
服务发现:从注册中心获取服务信息;
实质:存key服务命令,取value调用地址;Eureka Cilent:Java客户端,用于简化Server交互,内置负载均衡器,在服务启动后默认30秒向Eureka Server发送心跳,如果多周期没有接收到,将会移除该服务。(默认90秒)

(2)单集群使用

1.2.1 注册中心搭建

pom.xml



    
        cloud2022
        org.example
        1.0-SNAPSHOT
    
    4.0.0
    com.cloud-eureka

    cloud-eureka
    

    
        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
            2.2.10.RELEASE
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        

    


yml

server:
  port: 7001

eureka :
  instance :
    hostname: localhost #服务端实例名称
  client:
    register-with-eureka: false #false表示不注册自己
    fetch-registry: false
    service-url:
      #交互查询地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

采坑2:
如果pom.xml引入数据库相关依赖,需要配置数据源;
需要application:name;

完成yml

server:
  port: 7001
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false   #是否将自己注册到eureka中
    fetch-registry: false         #是否从eureka中获取信息
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      #defaultZone: http://localhost:1234/eureka/

spring:

  application:
    name: eureka

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver
#    type: com.alibaba.druid.pool.DruidDataSource

#2、mybatis-plus配置
mybatis-plus:
  #2-1 lodging 日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #2-2 deleted 逻辑删除
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
#  mapper-locations: classpath:mapper/*.xml

主启动类:@EnableEurekaServer

package com.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication(scanbasePackages = "com.eureka")
//@MapperScan("com.payment.Mapper")
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }

}

目录:

访问:http://localhost:7001/
结果:

1.2.2 注册支付模块

支付模块引入cilent依赖



    
        cloud2022
        org.example
        1.0-SNAPSHOT
    

    com.payment8001

    4.0.0

    payment8001

    

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
            3.0.5
        

        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        


    


主启动类激活注册注解

package com.payment;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication(scanbasePackages = "com.payment")
@EnableEurekaClient
public class PaymentApplication {

    public static void main(String[] args) {
        SpringApplication.run(PaymentApplication.class, args);
    }

}

yml文件配置cilent

#注意application:name 、是否注册
server:
  port: 8001

eureka:
  client:
    register-with-eureka: true #是否要注册
    fetchRegistry: true #是否抓取注册信息
    service-url:
      defaultZone: http://localhost:7001/eureka

spring:
  application:
    name : payment8001

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

#2、mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath:mapper/*.xml

采坑3:
提取公共类之后,mapper.xml文件的映射结果集需要修改



    
    
    
        
        
        
        
        
    


启动server与cilent,访问:http://localhost:7001,结果如下:
1.2.3 注册订单模块
与支付模块注册相同

微服务的服务远程调用最核心是高可用;
以上为单集群,以下构造多集群;

(3)多注册中心集群搭建

1.3.1 搭建第二个注册中心Eureka

修改host配置:C:WindowsSystem32driversetc目录

127.0.0.1       eureka1.7001
127.0.0.1       eureka2.7002

相互注册

eureka1.7001的application.yml

server:
  port: 7001
eureka:
  instance:
    hostname: eureka7001
  client:
    register-with-eureka: false   #是否将自己注册到eureka中
    fetch-registry: false         #是否从eureka中获取信息
    service-url:
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka7002:7002/eureka

spring:

  application:
    name: eureka

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver
#    type: com.alibaba.druid.pool.DruidDataSource

#2、mybatis-plus配置
mybatis-plus:
  #2-1 lodging 日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #2-2 deleted 逻辑删除
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
#  mapper-locations: classpath:mapper/*.xml


eureka2.7002的application.yml

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002
  client:
    register-with-eureka: false   #是否将自己注册到eureka中
    fetch-registry: false         #是否从eureka中获取信息
    service-url:
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka7001:7001/eureka

spring:

  application:
    name: eureka

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver
#    type: com.alibaba.druid.pool.DruidDataSource

#2、mybatis-plus配置
mybatis-plus:
  #2-1 lodging 日志
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #2-2 deleted 逻辑删除
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
#  mapper-locations: classpath:mapper/*.xml


启动两个集群主程序

访问:http://eureka7002:7002/
采坑4:

FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> replica.key [in template "eureka/navbar.ftlh" at line 68, column 62] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${replica.key} [in template "eureka/navbar.ftlh" at line 68, column 60] - Reached through: #include "navbar.ftlh" [in template "eureka/status.ftlh" at line 22, column 7] ---- Java stack trace (for programmers): ---- freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at freemarker.core.evalUtil.coerceModelToTextualCommon(evalUtil.java:479) at freemarker.core.evalUtil.coerceModelToStringOrMarkup(evalUtil.java:401) at freemarker.core.evalUtil.coerceModelToStringOrMarkup(evalUtil.java:370) at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:100) at freemarker.core.DollarVariable.accept(DollarVariable.java:63) at freemarker.core.Environment.visit(Environment.java:367) at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321) at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at freemarker.core.Environment.visitIteratorBlock(Environment.java:643) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at freemarker.core.Environment.visit(Environment.java:331) at freemarker.core.Environment.visit(Environment.java:337) at freemarker.core.Environment.include(Environment.java:2694) at freemarker.core.Include.accept(Include.java:171) at freemarker.core.Environment.visit(Environment.java:331) at freemarker.core.Environment.visit(Environment.java:337) at freemarker.core.Environment.process(Environment.java:310) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:179) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) at org.springframework.web.servlet.frameworkServlet.processRequest(frameworkServlet.java:1006) at org.springframework.web.servlet.frameworkServlet.doGet(frameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.frameworkServlet.service(frameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:108) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.Authenticatorbase.invoke(Authenticatorbase.java:526) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEnginevalve.invoke(StandardEnginevalve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591) at org.apache.tomcat.util.net.SocketProcessorbase.run(SocketProcessorbase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)


可能是host不规范或者配置路径不合理导致;
修改hosts以及配置访问成功:

127.0.0.1       eureka7001
127.0.0.1       eureka7002


(4)支付模块与订单模块同时注册进集群

只是defaultZone的修改

server:
  port: 8002

eureka:
  client:
    register-with-eureka: true #是否要注册
    fetchRegistry: true #是否抓取注册信息
    service-url:
#      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka

spring:
  application:
    name : consumer

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver
server:
  port: 8001

eureka:
  client:
    register-with-eureka: true #是否要注册
    fetchRegistry: true #是否抓取注册信息
    service-url:
#      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka

spring:
  application:
    name : payment8001

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

启动4个微服务测试
注意启动顺序,需要先启动注册中心;

(5)多服务提供者(支付模块)集群搭建

建一个与payment8001相同的module,server.port = 8002,其他内容一样

Controller小改造:知道是哪个服务返回的数据;

@RestController
@RequestMapping("/payment")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {

    private final PaymentService paymentService  ;

    @Value("${server.port}")
    public String serverPort;

    @PostMapping("/save")
    public Result saveEntity(@RequestBody Payment payment) {
        paymentService.saveEntity(payment);
        return new Result(200,"成功"+serverPort,"");
    }

    @GetMapping("/{id}")
    public Result saveEntity(@PathVariable("id") Integer id) {
        System.out.println(id);
        return new Result(200,"成功"+serverPort,paymentService.getPayment(id));
    }

}

采坑5:@Value注解要为spring的,非lombok。

访问:http://localhost:8002/payment/1
改造消费订单模块:可以多服务协调(与Eureka服务名称一致)

public static final String payment_URL ="http://PAYMENT"

开启负载均衡
访问:http://localhost:8080/consumer/1

{"code":200,"msg":"成功","date":{"id":1,"name":"999","createTime":null,"updateTime":null,"del":0,"version":1}}
{"code":200,"msg":"成功8002","date":{"id":1,"name":"999","createTime":null,"updateTime":null,"del":0,"version":1}}

(6)actuator信息完善

引入依赖

       
            org.springframework.boot
            spring-boot-starter-actuator
        

修改主机信息与访问路径显示IP

server:
  port: 8001

eureka:
  client:
    register-with-eureka: true #是否要注册
    fetchRegistry: true #是否抓取注册信息
    service-url:
#      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka
  instance: #修改主机名
    instance-id: payment8001
    prefer-ip-address: true #访问路径显示IP
spring:
  application:
    name : payment

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

(7)discover服务发现
通过服务发现来获得服务信息
采坑6:https://www.cnblogs.com/liuhouhou/p/9026776.html

Controller接口

   @Resource
    private DiscoveryClient discoveryCilent;
    
    @GetMapping("/get/discovery")
    public Object discovery(){
        return discoveryCilent;
    }

主启动类:@EnableDiscoveryClient

@SpringBootApplication(scanbasePackages = "com.payment")
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentApplication {

    public static void main(String[] args) {
        SpringApplication.run(PaymentApplication.class, args);
    }
}

执行结果:
(8)自我保护
如果某个注册服务无法使用,不会立即清理,依旧会保存该服务信息(CPA里的AP分支)。

关闭自我保护

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002
  client:
    register-with-eureka: false   #是否将自己注册到eureka中
    fetch-registry: false         #是否从eureka中获取信息
    service-url:
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      defaultZone: http://eureka7001:7001/eureka
    server:
      enable-self-preservation: false #默认关闭安全机制
      eviction-interval-timer-in-ms: 2000 #2秒不发送移除
2、ZooKeeper

zookeeper是一个分布式协调工具,可以实现注册中心功能,关闭防火墙后启动zookeeper服务器。

2.1 支付模块注册(payment8004)

pom.xml :Eureka依赖换位zookeeper



   
       cloud2022
       org.example
       1.0-SNAPSHOT
   
   4.0.0

   payment8004
   payment8004

   
       
           org.springframework.cloud
           spring-cloud-starter-zookeeper-discovery
           2.2.0.RELEASE
       
       
           com.commons
           commons
           1.0-SNAPSHOT
           compile
       

       
           org.springframework.boot
           spring-boot-starter-web
       
       
           org.springframework.boot
           spring-boot-starter-actuator
       
       
           com.baomidou
           mybatis-plus-boot-starter
       
       
           com.alibaba
           druid-spring-boot-starter
           1.1.10
       
       
       
           mysql
           mysql-connector-java
       
       
       
           org.springframework.boot
           spring-boot-starter-jdbc
       
       
           org.springframework.boot
           spring-boot-devtools
           runtime
           true
       
       
           org.projectlombok
           lombok
           true
       
       
           org.springframework.boot
           spring-boot-starter-test
           test
       

       
           org.springframework.boot
           spring-boot-devtools
           runtime
           true
       


   


application.yml

server:
  port: 8004

#eureka:
#  client:
#    register-with-eureka: true #是否要注册
#    fetchRegistry: true #是否抓取注册信息
#    service-url:
##      defaultZone: http://localhost:7001/eureka
#      defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka

spring:
  application:
    name : payment8004
  cloud:
    zookeeper:
      connect-string: 192.168.111.144:2181 #zookeeper地址

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

#2、mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath:mapper/*.xml

注启动类

@SpringBootApplication(scanbasePackages = "com.payment")
@EnableDiscoveryClient //激活
public class Payment4Application {

    public static void main(String[] args) {
        SpringApplication.run(Payment4Application.class, args);
    }

}

其他业务层与Eureka相同;
Controller

@RestController
@RequestMapping("/payment8004")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {

    private final PaymentService paymentService  ;

    @Value("${server.port}")
    public String serverPort;

    @PostMapping("/save")
    public Result saveEntity(@RequestBody Payment payment) {
        paymentService.saveEntity(payment);
        return new Result(200,"成功"+serverPort,"");
    }

    @GetMapping("/{id}")
    public Result saveEntity(@PathVariable("id") Integer id) {
        System.out.println(id);
        return new Result(200,"成功"+serverPort,paymentService.getPayment(id));
    }

}

zookeeper自带版本,如果与安装不一致,可能发生版本冲突,需要排除自身依赖,并引入与服务器一致的版本;

    
            org.springframework.cloud
            spring-cloud-starter-zookeeper-discovery
            2.2.0.RELEASE
            
                
                    org.apache.zookeeper
                    zookeeper
                
            
        
        
            org.apache.zookeeper
            zookeeper
            3.4.9
        

服务节点是临时节点;

2.2 订单消费模块注册(consumer8004)

pom.xml与支付模块相同



    
        cloud2022
        org.example
        1.0-SNAPSHOT
    
    4.0.0

    consumer8004
    consumer8004

    
        
            org.springframework.cloud
            spring-cloud-starter-zookeeper-discovery
            2.2.0.RELEASE
            
                
                    org.apache.zookeeper
                    zookeeper
                
            
        
        
            org.apache.zookeeper
            zookeeper
            3.4.9
        

        
            com.commons
            commons
            1.0-SNAPSHOT
            compile
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.baomidou
            mybatis-plus-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
    


application.yml更换server.port 和 application.name

server:
  port: 8081

#eureka:
#  client:
#    register-with-eureka: true #是否要注册
#    fetchRegistry: true #是否抓取注册信息
#    service-url:
##      defaultZone: http://localhost:7001/eureka
#      defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka

spring:
  application:
    name : consumer81
  cloud:
    zookeeper:
      connect-string: 192.168.111.144:2181 #zookeeper地址

  datasource:
    url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
    username: root
    password: 123456
    driver-class-name=com: mysql.cj.jdbc.Driver

#2、mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config :
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0
  mapper-locations: classpath:mapper/*.xml

配置restTemplate

@Configuration
public class ApplicationConfig {
    @Bean
    @LoadBalanced //开启负载均衡
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

controller

@RestController
@RequestMapping("/consumer2")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {

//    public static final String payment_URL ="http://localhost:8001";
    public static final String payment_URL ="http://PAYMENT";

    private final RestTemplate restTemplate  ;

    @GetMapping("/get/save")
    public Result saveEntity(Payment payment) {
        return restTemplate.postForObject(payment_URL+"/payment8004/save",payment,Result.class);
    }

    @GetMapping("/{id}")
    public Result getEntity(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(payment_URL+"/payment8004/"+id,Result.class);
    }
3、Consul

3.1 简介
Go语言开发,提供了微服务的服务治理、配置中心、控制总线等一种完整的服务网格解决方案。基于raft协议,比较简介;支持健康检查;提供图形界面;跨平台,支持Linux、Mac、Windows等。

下载:https://www.consul.io/downloads
启动:consul agent -dev
访问:http://localhost:8500

3.2 注册服务提供者-支付模块pom.xml

 
            org.springframework.cloud
            spring-cloud-starter-consul-discovery
        

application.yml

server:
  port: 8006

spring:
  application:
    name : payment8006
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

*主启动类

@SpringBootApplication(scanbasePackages = "com.payment")
@EnableDiscoveryClient //激活
public class Payment6Application {

    public static void main(String[] args) {
        SpringApplication.run(Payment6Application.class, args);
    }

}

目录:

启动访问:


3.3 注册服务消费者-订单模块

pom.xml 依赖与支付模块一致;application.yml与支付模块一致(除server.port与application.name外);restTemplate配置与zookeeper订单消费者模块一致;主启动类与zookeeper订单消费者模块一致;业务类需要跟换端口号与url(payment8006),与服务名一致;

总结:3个注册中心异同点
CAP:强一致性、可用性、分区容错性;关注粒度数据。

EurekaJava、AP、可配支持健康检查、http
ConsulGo、CP、支持健康检查、http
ZookeeperJava、CP、支持健康检查、客户端
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/761158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号