项目模型

项目结构

本实例创建model都是通过maven手动创建,依赖进行手动导入,好处是比使用springboot模板创建更加灵活,更方便的进行父子模块的管理。
1.创建父项目feign-project

2.对父项目feign-project的pom.xml,进行手动导入依赖
4.0.0 domain-project common-api user-center order-center org.springframework.boot spring-boot-starter-parent 2.3.12.RELEASE pom com.it fegin-project 0.0.1-SNAPSHOT 1.8 Hoxton.SR12 org.projectlombok lombok true org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import
3.domain-project子模块的创建

3.1使用maven进行创建,选择父项目为feign-project

2.pom.xml文件
fegin-project com.it 0.0.1-SNAPSHOT 4.0.0 com.it domain-project
3.3创建实体类Order
package com.it.domain;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Order {private Integer orderId;private String name;private Double price;}
4.common-api子模块的创建

4.1.使用maven进行创建,选择父项目为feign-project
4.2.pom.xml文件
fegin-project com.it 0.0.1-SNAPSHOT 4.0.0 com.it common-api com.it domain-project 0.0.1-SNAPSHOT org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-netflix-hystrix
4.3UserOrderFeign接口,做远程调用的接口
package com.it.feign;import com.it.domain.Order;
import com.it.feign.hystrix.UserOrderFeignHystrix;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(value = "order-service",fallback = UserOrderFeignHystrix.class)
public interface UserOrderFeign {//查询订单@GetMapping("/order/getOrderByUserById")Order getOrderByUserById(@RequestParam Integer userId);}
4.4UserOrderFeignHystrix实现类,做熔断器调用的方法
package com.it.feign.hystrix;import com.it.domain.Order;
import com.it.feign.UserOrderFeign;
import org.springframework.stereotype.Component;@Component
public class UserOrderFeignHystrix implements UserOrderFeign {/*** 一般远程调用的熔断可以直接返回一个null值* @param userId* @return*/@Overridepublic Order getOrderByUserById(Integer userId) {return null;}
}
5.order-center子模块的创建

5.1使用maven进行创建,选择父项目为feign-project
5.2pom.xml文件
fegin-project com.it 0.0.1-SNAPSHOT 4.0.0 com.it order-center com.it common-api 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-maven-plugin
5.3application.yml文件
server:port: 8080
spring:application:name: order-service
eureka:client:service-url:defaultZone: http://192.168.174.133:8761/eurekainstance:hostname: localhostinstance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
5.4OrderController类,实现另一个子模块common-api的UserOrderFeign接口,重写接口中的方法
package com.it.controller;import com.it.domain.Order;
import com.it.feign.UserOrderFeign;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController implements UserOrderFeign {@Overridepublic Order getOrderByUserById(Integer userId) {System.out.println(userId);Order order = Order.builder().name("汉堡").price(8D).orderId(01).build();return order;}}
5.5主函数类
package com.it;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class OrderServiceApp {public static void main(String[] args) {SpringApplication.run(OrderServiceApp.class,args);}
}
6.创建子模块user-center

6.1使用maven进行创建,选择父项目为feign-project
6.2pom.xml文件
fegin-project com.it 0.0.1-SNAPSHOT 4.0.0 com.it user-center com.it common-api 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client
6.3application.yml文件
server:port: 8081
spring:application:name: user-service
eureka:client:service-url:defaultZone: http://192.168.174.133:8761/eurekainstance:hostname: localhostinstance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
feign:hystrix:enabled: true #开启熔断
6.4UserController类,调用另一个子模块common-api的UserOrderFeign接口中的方法,进行远程调用
package com.it.controller;import com.it.domain.Order;
import com.it.feign.UserOrderFeign;
import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
public class UserController {@Resourcepublic UserOrderFeign userOrderFeign;@GetMapping("find")public Order findOrder(){Order orderByUserById = userOrderFeign.getOrderByUserById(01);return orderByUserById;}}
6.5主函数类
package com.it;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class UserServiceApp {public static void main(String[] args) {SpringApplication.run(UserServiceApp.class,args);}
}
7.功能测试
7.1oreder-center(8080),user-cneter(8081)都正常开启服务

7.2当oreder-center(8080)服务宕机,进行开启熔断器,返回一个null值
