首页 技术 正文
技术 2022年11月11日
0 收藏 646 点赞 2,172 浏览 17314 个字

一、. 创建Eureka-Server 服务中心项目

1. 创建Eureka-Server 服务中心项目架构如下

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

2. pom.xml

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

3.配置文件application.properties

 #给当前服务起名
spring.application.name=eureka-server #给当前服务指定端口号
server.port=8761 #register-with-eureka :表示是将自己注册到Eureka Server,默认为true。
#因为当前应用就是Eureka Server,所以将其设置位false
#★当前服务时eureka的服务端还是客户端,当前是服务端因此false
eureka.client.register-with-eureka=false #fetch-registry :表示是否从Eureka Server获取注册信息,默认为true。不需要同步数据就将其设为false
#★是否从eureka服务中心获取信息,因为当前是服务端因此不需要在服务端获取信息
eureka.client.fetch-registry=false #defaultZone :设置与Eureka Server交互的地址,
#查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;
#多个地址可使用 , 分隔。
#将本eureka服务的地址公开暴露给所有的客户端,因为只有所有的客户端知道eureka服务的地址,才能将信息
#注册到eureka服务中心
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

属性文件

4.启动类

 package cn.kgc; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; //开启eureka的服务端
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
} }

启动类

二、创建一方提供者eureka-client-provider-findcla

1. 项目结构如下:

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

2.pom.xml文件内容

     <dependencies>
<!--引用公共组件-->
<dependency>
<groupId>cn.kgc</groupId>
<artifactId>eureka-common-clastu</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency> <!--修改版本号-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

pom.xml

3.application.properties属性文件

 #给当前服务起名字
spring.application.name=eureka-client-provider-findcla #给当前服务设置端口号
server.port=8762 #指定eureka-server的服务地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #数据源的配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.117.145:3306/kh66
spring.datasource.username=root
spring.datasource.password=ok #别名配置
mybatis.type-aliases-package=cn.kgc.vo

application.properties

4.ClassesMapper.java

 package cn.kgc.mapper; import cn.kgc.vo.Classes;
import org.apache.ibatis.annotations.Select; import java.util.List; /**
* Created by Administrator on 2019/8/19.
*/
public interface ClassesMapper {
@Select("select * from classes")
List<Classes> optionData();
}

ClassesMapper.java

5.ClassesService.java

 package cn.kgc.service; import cn.kgc.vo.Classes;
import org.apache.ibatis.annotations.Select; import java.util.List; /**
* Created by Administrator on 2019/8/19.
*/
public interface ClassesService { List<Classes> optionData();
}

ClassesService.java

6.ClassesServiceImpl.java

 package cn.kgc.service; import cn.kgc.mapper.ClassesMapper;
import cn.kgc.vo.Classes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class ClassesServiceImpl implements ClassesService{
@Autowired
private ClassesMapper classesMapper; public List<Classes> optionData() {
return classesMapper.optionData();
}
}

ClassesServiceImpl.java

7.CenterController.java

 package cn.kgc.controller; import cn.kgc.service.ClassesService;
import cn.kgc.vo.Classes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
public class CenterController {
@Autowired
private ClassesService classesService; @RequestMapping(value = "/option.do")
public List<Classes> optionData() {
return classesService.optionData();
}
}

CenterController.java

8.启动类

 package cn.kgc; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @MapperScan("cn.kgc.mapper")
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientProviderFindclaApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientProviderFindclaApplication.class, args);
} }

启动类

三、创建多方提供者eureka-client-provider-findstu

1.项目结构如下:

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

2.pom.xml文件如下

 <dependencies>
<!--引入公共组件-->
<dependency>
<groupId>cn.kgc</groupId>
<artifactId>eureka-common-clastu</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--添加版本号-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>8.16.2</version>
</dependency>-->
</dependencies>

pom.xml

3..StudentMapper.java

 package cn.kgc.mapper; import cn.kgc.vo.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update; import java.util.List;
import java.util.Map; /**
* Created by Administrator on 2019/8/19.
*/
public interface StudentMapper {
List<Map<String,Object>> showData(Student student); @Insert("INSERT INTO kh66.student (sname, password, subject, result, cid) VALUES(#{sname},#{password},#{subject},#{result},#{cid}) ")
int addStu(Student student); @Update("UPDATE kh66.student SET sname =#{sname}, password =#{password}, subject = #{subject}, result =#{result}, cid =#{cid} WHERE sid =#{sid} ")
int editStu(Student student); @Delete("delete from student where sid=#{sid}")
int delStu(Integer sid);
}

StudentMapper.java

4.StudentMapper.xml

 <?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="cn.kgc.mapper.StudentMapper">
<select id="showData" parameterType="Student" resultType="map">
select s.*,c.cname from student s,classes c where s.cid=c.cid
<if test="sid!=null">
and s.sid=#{sid}
</if>
<if test="cid!=null and cid!=-1">
and s.cid=#{cid}
</if>
<if test="sname!=null">
and sname like concat('%',#{sname},'%')
</if>
</select>
</mapper>

StudentMapper.xml

5..StudentService.java

 package cn.kgc.service; import cn.kgc.vo.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.springframework.web.bind.annotation.RequestBody; import java.util.List;
import java.util.Map; /**
* Created by Administrator on 2019/8/19.
*/
public interface StudentService {
List<Map<String,Object>> showData(Student student); int addStu(Student student); int editStu( Student student); int delStu(Integer sid);
}

StudentService.java

6.StudentServiceImpl.java

 package cn.kgc.service; import cn.kgc.mapper.StudentMapper;
import cn.kgc.vo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody; import java.util.List;
import java.util.Map; @Service
@Transactional
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper; @Override
public List<Map<String, Object>> showData( Student student) {
return studentMapper.showData(student);
} @Override
public int addStu(Student student) {
return studentMapper.addStu(student);
} @Override
public int editStu(Student student) {
return studentMapper.editStu(student);
} @Override
public int delStu(Integer sid) {
return studentMapper.delStu(sid);
}
}

StudentServiceImpl.java

7.CenterController.java

 package cn.kgc.controller; import cn.kgc.mapper.StudentMapper;
import cn.kgc.service.StudentService;
import cn.kgc.vo.Student;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.ribbon.proxy.annotation.Http;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*; import java.util.List;
import java.util.Map; @RestController
public class CenterController{
ObjectMapper om=new ObjectMapper(); @Autowired
private StudentService studentService; @RequestMapping(value = "/data.do")
public List<Map<String,Object>> showData(@RequestBody Student student){
System.out.println("stu=showData>>>>>>>>student:"+student.getSid());
return studentService.showData(student);
} @RequestMapping(value = "/add.do")
public int addStu(@RequestBody Student student){
return studentService.addStu(student);
} @RequestMapping(value = "/edit.do")
public int editStu(@RequestBody Student student){
return studentService.editStu(student);
} @RequestMapping(value = "/del.do")
public int delStu(@RequestParam("sid") Integer sid) {
return studentService.delStu(sid);
}
/*
@RequestMapping(value = "/data.do",consumes = "application/json")
public String showData(@RequestBody Student student) throws Exception{
System.out.println("stu=showData>>>>>>>>student:"+student.getSid());
String str=om.writeValueAsString(studentService.showData(student)); return str;
} @RequestMapping(value = "/add.do",consumes = "application/json")
public String addStu(@RequestBody Student student) throws Exception{
String str=om.writeValueAsString(studentService.addStu(student));
return str;
} @RequestMapping(value = "/edit.do")
public String editStu(@RequestBody Student student) throws Exception{
String str=om.writeValueAsString(studentService.editStu(student));
return str;
} @RequestMapping(value = "/del.do")
public String delStu(@RequestParam("sid") Integer sid) throws Exception{
String str=om.writeValueAsString(studentService.delStu(sid));
return str;
}*/
}

CenterController.java

8.启动类

 package cn.kgc; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @MapperScan("cn.kgc.mapper")
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientProviderFindstuApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientProviderFindstuApplication.class, args);
} }

启动类

四、创建调用者项目eureka-client-consumer-clastu-p

使用feign调用上述2个提供者项目里的controller拿值,并使用熔断器,进行错误请求处理

1.项目结构如下

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

2.pom.xml文件内容如下

     <dependencies>
<dependency>
<groupId>cn.kgc</groupId>
<artifactId>eureka-common-clastu</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<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-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>8.16.2</version>
</dependency>-->
</dependencies>

pom.xml

3.application.properties

 spring.application.name=eureka-client-consumer-clastu-p server.port=8766 eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ #将feign上集成的断路器设置位有效开启状态
feign.hystrix.enabled=true

application.properties

4.一方feign接口,ClassesProviderFeign.java

package cn.kgc.feign;import cn.kgc.vo.Classes;
import cn.kgc.vo.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;
import java.util.Map;@FeignClient(name = "eureka-client-provider-findcla",fallback =ClassesProviderFeignFallBack.class )
public interface ClassesProviderFeign { @RequestMapping("/option.do")
public String optionData();}

ClassesProviderFeign.java

5.一方feign接口的容错类:ClassesProviderFeignFallBack.java

 package cn.kgc.feign; import cn.kgc.vo.Classes;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; //classes容错处理类
@Component
public class ClassesProviderFeignFallBack implements ClassesProviderFeign{ @Override
public String optionData() {
return "提供者服务器请求异常,请稍后再试....";
}
}

ClassesProviderFeignFallBack.java

6.多方feign接口,StudentProviderFeign.java

 package cn.kgc.feign; import cn.kgc.vo.Classes;
import cn.kgc.vo.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import java.util.ArrayList;
import java.util.List;
import java.util.Map; @FeignClient(name = "eureka-client-provider-findstu",fallback = StudentProviderFeignFallBack.class)
public interface StudentProviderFeign { @RequestMapping(value = "/data.do")
public String showData(@RequestBody Student student); @RequestMapping(value = "/add.do")
public String addStu(@RequestBody Student student); @RequestMapping(value = "/edit.do")
public String editStu(@RequestBody Student student); @RequestMapping(value = "/del.do")
public String delStu(@RequestParam("sid") Integer sid) ; }

StudentProviderFeign.java

7.多方feign接口的容错类:StudentProviderFeignFallBack.java

 package cn.kgc.feign; import cn.kgc.vo.Student;
import org.springframework.stereotype.Component; import java.util.List;
import java.util.Map; @Component
public class StudentProviderFeignFallBack implements StudentProviderFeign{ public String showData(Student student) {
return "提供服务器数据没有查到!";
} public String addStu(Student student) {
return "提供服务器数据添加失败!";
} public String editStu(Student student) {
return "提供服务器修改数据失败!";
} public String delStu(Integer sid) {
return "删除数据失败!";
}
}

tudentProviderFeignFallBack.java

8.CenterController.java

 package cn.kgc.controller; import cn.kgc.feign.ClassesProviderFeign;
import cn.kgc.feign.StudentProviderFeign;
import cn.kgc.vo.Classes;
import cn.kgc.vo.Student;
import feign.Headers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.List;
import java.util.Map; @RestController
public class CenterController { @Autowired
private ClassesProviderFeign classesProviderFeign; @Autowired
private StudentProviderFeign studentProviderFeign; @RequestMapping(value = "/option.do",consumes = "application/json" )
public String optionData(){
return classesProviderFeign.optionData();
} @RequestMapping(value = "/data.do",consumes = "application/json")
public String showData(@RequestBody Student student){
System.out.println("clastu=showData>>>>>>>>student:"+student.getSid());
return studentProviderFeign.showData(student);
} @RequestMapping(value = "/info.do",consumes = "application/json")
public Map<String,Object> getInfo(@RequestBody Student student){
Map<String,Object> map=new HashMap<String,Object>();
System.out.println("clastu=getInfo>>>>>>>>student:"+student.getSid());
map.put("stu",studentProviderFeign.showData(student));
map.put("clalist",classesProviderFeign.optionData());
return map;
} @RequestMapping(value = "/add.do",consumes = "application/json")
public String addStu(Student student){
return studentProviderFeign.addStu(student);
} @RequestMapping(value = "/edit.do",consumes = "application/json")
public String editStu(Student student){
return studentProviderFeign.editStu(student);
} @RequestMapping(value = "/del.do",consumes = "application/json")
public String delStu(Integer sid){
return studentProviderFeign.delStu(sid);
}
}

CenterController.java

9.启动类

 package cn.kgc; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients; @EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class EurekaClientConsumerClastuPApplication { public static void main(String[] args) {
SpringApplication.run(EurekaClientConsumerClastuPApplication.class, args);
} }

启动类

10.测试正常流程,

按顺序启动一、二、三、四项目

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

11.容错的测试

停掉三的项目,因为三项目是多方的提供者,停掉则四访问不到会走容错

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

springcloud(九):熔断器Hystrix和Feign的全套应用案例(二)

注:本帖为“”Holly老师”原创,转载请注明出处,谢谢!

出处:https://www.cnblogs.com/holly8/p/11415344.html  

上一篇: 打包Electron项目
下一篇: vue项目中引入Sass
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,027
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,518
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,365
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,146
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,780
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,857