前言: 最近在做项目时用到了微服务的架构. 本篇文章主要说明微服务之间让服务进行通信.
正文: 在其他模块进行调用 user 模块的用户所有信息.
在业务层实现的代码
- @FeignClient(value="user",fallback=UserServerFailBack.class)
- public interface UserServer {
- @RequestMapping(value = "/user/getUserByIdReturnList", method = RequestMethod.GET)
- public List<User> getUserName(@RequestParam(value="userId") int userId);
- }
其中的 @FeignClient 注解中的 user 是服务名, 此服务名是注册到注册机上的, 因此访问服务名就可以访问到其服务. fallback 方法是熔断处理. 其特点是当由于网络环境或者 user 模块的服务崩溃时进行调用, 保证本模块的服务不会出现雪崩式的崩溃, 并且可以正常运行.@RequestMapping 注解中的 value 值是需要调用的 user 模块的接口名
在业务实现层实现的代码
- package com.cc.yonyou.integral.service;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import org.springframework.stereotype.Component;
- import com.cc.yonyou.integral.domain.po.User;
- /**
- * 熔断机制的处理
- *
- * 当我调用 User 服务的方法, User 返回异常时, 处理返回异常的方法
- * @author liudongqiang
- *
- */
- @Component
- public class UserServerFailBack implements UserServer{
- @Override
- public List<User> getUserName(int userId) {
- // TODO Auto-generated method stub
- /**
- * 如果服务发生异常则执行这个方法
- */
- List<User> list = new ArrayList<>();
- User user = new User();
- user.setAccount("未知");
- user.setCard("未知");
- user.setCreateBy(1);
- user.setCreateTime(new Date());
- user.setDealerCode("未知");
- user.setIsDelete(0);
- user.setPassword("未知");
- user.setPhone("未知");
- user.setUpdateBy(1);
- user.setUpdateTime(new Date());
- user.setUserGrade(1);
- user.setUserId(1);
- user.setUsername("未知");
- list.add(user);
- return list;
- }
- }
本快代码是熔断处理结构.
其他业务层实现层调用代码
List<User> userList = userServer.getUserName(list.get(i).getUserId());
本段代码是对业务层方法的调用.
user 模块的接口代码
- @RequestMapping(value="/getUserByIdReturnList",method=RequestMethod.GET)
- public String getUserById(Integer userId){
- System.out.println("--------------------------------"+userId);
- //return otherService.getUserById(userId);
- return "阿帅";
- }
本块代码只是进行返回字符串便于测试.
user 模块的配置文件 application.properties
- eureka.instance.ip-address=0.0.0.0
- eureka.instance.metadataMap.zone =0.0.0.0:0000
- eureka.client.preferSameZoneEureka = true
- eureka.instance.prefer-ip-address = true
本块代码的作用是改变 eureka 客户端向 eureka 服务器进行注册时的默认注册信息.
eureka.instance.ip-address 改变的是注册的默认 ip
eureka.instance.metadataMap.zone 改变的是注册的默认范围也就是域
eureka.client.preferSameZoneEureka 默认为 false, 作用为是否让默认域改变
eureka.instance.prefer-ip-address 默认为 false, 作用为是否让默认 ip 可改变
当我们进行调用时 eclipse 后台监控会进行显示
- 2018-09-22 10:24:14.680 INFO 18444 --- [ hystrix-user-1] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater
- 2018-09-22 10:24:14.702 INFO 18444 --- [ hystrix-user-1] c.netflix.config.ChainedDynamicProperty : Flipping property: user.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
- 2018-09-22 10:24:14.704 INFO 18444 --- [ hystrix-user-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client user initialized: DynamicServerListLoadBalancer:{
- NFLoadBalancer:name=user,current list of Servers=[0.0.0.0:0000],Load balancer stats=Zone stats: {
- 0.0.0.0:0000=[Zone:0.0.0.0:0000; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
- },Server stats: [[Server:0.0.0.0:0000; Zone:0.0.0.0:0000; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
- ]
- }ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@1e59351c
- 2
来源: https://www.cnblogs.com/zhznb/p/9689673.html