添加依赖
<dependencies>
<!-- Eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
加上注解
@EnableEurekaServer // 声明这个应用是一个EurekaServer
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class EurekaDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaDemoApplication.class,args);
}
}
进行配置
server:
port: 10086 # 端口
spring:
application:
name: eureka-server # 应用名称,会在eureka中显示
eureka:
client:
register-with-eureka: false # 是否注册自己的信息到EurekaServer,默认是true
fetch-registry: false # 是否拉取其它服务的信息,默认是true
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
defaultZone: http://127.0.0.1:10086/eureka
server:
port: 10000 # 端口
spring:
application:
name: user-provider# 应用名称,会在eureka中显示
eureka:
client:
service-url: # 向服务端注册信息
defaultZone: http://127.0.0.1:10086/eureka
server:
eviction-interval-timer-in-ms: 30000 # 服务续约(renew)的间隔
lease-expiration-duration-in-seconds: 90000 # 服务失效时间
在RestTemplate 上添加@LoadBalanced注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
修改URL表达式 :
// 地址直接写服务名称即可
String baseUrl = "http://www.lhsxpumps.com/_user-service/user/";
消费端添加依赖 :
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
启动类上加上注解 : @EnableCircuitBreaker
编写降级逻辑 : 成功的话正常操作,失败友好处理.
@HystrixCommand(fallbackMethod = "queryUserByIdFallback")
public String xxx(xx){
xx;
return : "xx"
}
public String queryUserByIdFallback(xx){
xx;
return : "服务器太忙,请稍后重试"
}
为了简化开发,通常在类上添加@DefaultProperties(defaultFallback = “queryUserByIdFallback”) 在方法上声明使用熔断隔离 @HystrixCommand()
自定义超时时长 :
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMillisecond: 6000 # 设置hystrix的超时时间为6000ms
创建maven项目并导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
创建feign的客户端
@FeignClient("user-service")
public interface UserFeignClient {
@GetMapping("/user/{id}")
User queryUserById(@PathVariable("id") Long id);
}
mapper
很像@FeignClient
,声明这是一个Feign客户端,类似@Mapper
注解。同时通过value
属性指定服务名称在启动类上开启feign功能
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@EnableFeignClients // 开启Feign功能
public class UserConsumerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(UserConsumerDemoApplication.class, args);
}
}
负载均衡 : feign集成了ribbon,可以通过服务名.ribbon.xx
来对指定服务配置
user-service:
ribbon:
ConnectTimeout: 250 # 连接超时时间(ms)
ReadTimeout: 1000 # 通信超时时间(ms)
OkToRetryOnAllOperations: true # 是否对所有操作重试
MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
MaxAutoRetries: 1 # 同一实例的重试次数
Hystix支持 : feign默认不开启
feign:
hystrix:
enabled: true # 开启Feign的熔断功能
我们要定义一个类,实现刚才编写的UserFeignClient,作为fallback的处理类
@Component
public class UserFeignClientFallback implements UserFeignClient {
@Override
public User queryUserById(Long id) {
User user = new User();
user.setId(id);
user.setName("用户查询出现异常!");
return user;
}
}
然后在UserFeignClient中,指定刚才编写的实现类
@FeignClient(value = "user-service", fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
@GetMapping("/user/{id}")
User queryUserById(@PathVariable("id") Long id);
}
请求压缩 : Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能
feign:
compression:
request:
enabled: true # 开启请求压缩
response:
enabled: true # 开启响应压缩
创建maven工程
添加依赖
编写启动类
@SpringBootApplication
@EnableZuulProxy // 开启Zuul的网关功能
@EnableDiscoveryClient
public class ZuulDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulDemoApplication.class, args);
}
}
编写配置
server:
port: 10010 #服务端口
spring:
application:
name: api-gateway #指定服务名
编写路由规则
eureka:
client:
registry-fetch-interval-seconds: 5 # 获取服务列表的周期:5s
service-url:
defaultZone: http://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
zuul:
routes:
user-service: /user-service/** # 这里是映射路径
路由前缀
zuul:
prefix: /api # 添加路由前缀
routes:
user-service: # 这里是路由id,随意写
path: /user-service/** # 这里是映射路径
service-id: user-service # 指定服务名称
本文地址:https://blog.csdn.net/zwq56693/article/details/107216995
如对本文有疑问, 点击进行留言回复!!
荐 深入理解Java中的BigInteger和 BigDecimal,再也不怕面试了
tomact正常启动,但是在日志文件报错java.lang.NoClassDefFoundError: java/util/logging/Logger
servlet整合quartz:servlet中使用quartz,服务器启动时加载任务
荐 Java——集合中的Map接口通过HashMap类实现一些常用的方法
SpringBoot整合mybatis访问时报错Invalid bound statement (not found)
网友评论