赞
踩
实现80端口和8001、8002都注册到Eureka服务中心,同时7001和7002是一个服务集群,实现相互注册、相互守望
pom.xml文件
- <dependencies>
- <!--eureka-server-->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
- <dependency>
- <groupId>com.atguigu.springcloud</groupId>
- <artifactId>cloud-api-commons</artifactId>
- <version>${project.version}</version>
- </dependency>
- <!--boot web actuator-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <!--一般通用配置-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- </dependency>
- </dependencies>
application.yml
- server:
- port: 7001
- eureka:
- instance:
- hostname: eureka7001.com #eureka服务端的实例名称
- client:
- register-with-eureka: false #false表示不向注册中心注册自己。
- fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
- service-url:
- #集群指向其它eureka
- defaultZone: http://eureka7002.com:7002/eureka/
- #单机就是7001自己
- #defaultZone: http://eureka7001.com:7001/eureka/
- server:
- #关闭自我保护机制,保证不可用服务被及时踢除
- enable-self-preservation: false
- eviction-interval-timer-in-ms: 2000
7001启动类
- package com.atguigu.springcloud;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
-
- /**
- * @author BLL
- * @create 2020/3/23 17:39
- */
- @SpringBootApplication
- @EnableEurekaServer
- public class EurekaMain7001 {
- public static void main(String[] args) {
- SpringApplication.run(EurekaMain7001.class, args);
- }
- }
7001服务中注册进了7002
7002服务中注册进了7001,从而实现了7001和7002服务之间相互注册、相互守望.
目录结构(因为既然是提供者肯定要实现一定的业务逻辑)
pom.xml文件
- <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>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid-spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.16.18</version>
- </dependency>
- <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
- <groupId>com.atguigu.springcloud</groupId>
- <artifactId>cloud-api-commons</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- </dependencies>
application.yml文件
- server:
- port: 8001
- spring:
- application:
- name: cloud-payment-service #服务名称
-
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
- driver-class-name: org.gjt.mm.mysql.Driver
- url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
- username: root
- password: root
- eureka:
- client:
- # 表示是否将自己注册进 EurekaServer 默认为 true
- register-with-eureka: true
- # 是否从 EurekaServer 抓取已有的注册信息,默认为 true. 单节点无所谓,集群必须设置为 true,才能配置 ribbon 使用负载均衡
- fetch-registry: true
- service-url:
- defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
- instance:
- instance-id: payment8001
- prefer-ip-address: true #访问路径可以显示Ip地址
- lease-renewal-interval-in-seconds: 1
- lease-expiration-duration-in-seconds: 2
- mybatis:
- mapper-locations: classpath:mapper/*.xml
- type-aliases-package: com.atguigu.springcloud.entities #所有entity别名所在包
-
Controller层的业务类
- package com.atguigu.springcloud.controller;
-
- import com.atguigu.springcloud.entities.CommonResult;
- import com.atguigu.springcloud.entities.Payment;
- import com.atguigu.springcloud.service.PaymentService;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.platform.commons.logging.LoggerFactory;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.client.ServiceInstance;
- import org.springframework.cloud.client.discovery.DiscoveryClient;
- import org.springframework.web.bind.annotation.*;
-
- import javax.annotation.Resource;
- import java.util.List;
- import java.util.logging.Logger;
-
- /**
- * @author BLL
- * @create 2020/3/17 17:49
- */
- @RestController
- @Slf4j
- public class PaymentController {
- @Resource
- private PaymentService paymentService;
- @Value("${server.port}")
- private String serverPort;
- @Resource
- private DiscoveryClient discoveryClient; //服务发现,可以发现自己注册到服务上的信息
- @PostMapping(value = "/payment/create")
- public CommonResult create(@RequestBody Payment payment){
- int result=paymentService.create(payment);
- if(result>0){
- return new CommonResult(200,"插入成功,serverPort"+serverPort,result);
- }else {
- return new CommonResult(444,"插入数据失败",null);
- }
- }
-
- @GetMapping(value = "/payment/get/{id}")
- public CommonResult getPaymentById(@PathVariable("id") Long id){
- Payment payment=paymentService.getPamentById(id);
- if(payment!=null){
- return new CommonResult(200,"查询数据成功,serverPort"+serverPort,payment);
- }else {
- return new CommonResult(444,"插入数据库失败",null);
- }
- }
- @GetMapping(value = "/payment/discover")
- public Object discover(){
- List<String> service=discoveryClient.getServices();
- for(String element:service){
- System.out.println("******element"+element);
- }
- List<ServiceInstance> instances=discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
- for(ServiceInstance instance:instances){
- System.out.println(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
- }
- return discoveryClient;
- }
- }
- package com.atguigu.springcloud;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-
- @SpringBootApplication
- @EnableEurekaClient
- @EnableDiscoveryClient
- public class PaymentMain8001 {
- public static void main(String[] args) {
- SpringApplication.run(PaymentMain8001.class, args);
- }
-
- }
启动8001和8002后
- <dependencies>
- <dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
- <groupId>com.atguigu.springcloud</groupId>
- <artifactId>cloud-api-commons</artifactId>
- <version>${project.version}</version>
- </dependency>
- <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>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- <optional>true</optional>
- </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>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-commons</artifactId>
- <version>2.2.1.RELEASE</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-commons</artifactId>
- <version>2.2.1.RELEASE</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
application.yml文件
- server:
- port: 80
- spring:
- application:
- name: cloud-order-service
- eureka:
- client:
- #表示是否将自己注册进EurekaServer默认为true。
- register-with-eureka: true
- #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
- fetchRegistry: true
- service-url:
- #单机
- #defaultZone: http://localhost:7001/eureka
- # 集群
- defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka # 集群版tp://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
80服务的启动类:
- package com.atguigu.springcloud;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- /**
- * @author BLL
- * @create 2020/3/18 17:29
- */
- @SpringBootApplication
- public class OrderMain80 {
- public static void main(String[] args) {
- SpringApplication.run(OrderMain80.class, args);
- }
- }
启动80服务的启动类后
80服务的controller的实现如下:(注意:服务名称进行访问的)
public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";
- package com.atguigu.springcloud.Controller;
-
- import com.atguigu.springcloud.entities.CommonResult;
- import com.atguigu.springcloud.entities.Payment;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.client.RestTemplate;
-
- import javax.annotation.Resource;
-
- /**
- * @author BLL
- * @create 2020/3/18 17:42
- */
- @RestController
- @Slf4j
- public class OrderController {
- // public static final String PAYMENT_URL="http://localhost:8001";
- public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";
-
- @Resource
- private RestTemplate restTemplate;
- @GetMapping(value = "/consumer/payment/create")
- public CommonResult create(Payment payment){
- return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
- }
- @GetMapping(value = "/consumer/payment/get/{id}")
- public CommonResult getPayment1(@PathVariable("id")Long id){
- return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
- }
- @GetMapping(value = "/consumer/payment/getEntity/{id}")
- public CommonResult getPayment2(@PathVariable("id")Long id){
- ResponseEntity<CommonResult> entity=restTemplate.getForEntity(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
- if(entity.getStatusCode().is2xxSuccessful()){
- return entity.getBody();
- }else {
- return new CommonResult(444,"插入数据失败",null);
- }
-
- }
- }
通过请求映射地址请求:(由于Eureka中自带rubbio的负载均衡机制,所以会实现轮询机制,对8001提供者和8002提供者进行轮询访问)
以上就是利用Eureka进行注册,消费过程,刚开始学习,还有很多原理弄得不太清楚,所以有点乱,但是就是为了记下来,加深下印象,不喜勿喷,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。