微服务之不同服务间进行接口调用

发布日期:2019-06-22

前言:最近在做项目时用到了微服务的架构。本篇文章主要说明微服务之间让服务进行通信。

正文:在其他模块进行调用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.serviceimport java.util.ArrayListimport java.util.Dateimport java.util.Listimport org.springframework.stereotype.Componentimport com.cc.yonyou.integral.domain.po.User/** * 熔断机制的处理 * * 当我调用User服务的方法,User返回异常时,处理返回异常的方法 * @author liudongqiang * */@Componentpublic 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.0eureka.instance.metadataMap.zone =0.0.0.0:0000 eureka.client.preferSameZoneEureka = trueeureka.instance.prefer-ip-address = true

本块代码的作用是改变eureka客户端向eureka服务器进行注册时的默认注册信息。

eureka.instance.ip-address改变的是注册的默认ipeureka.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 PollingServerListUpdater2018-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 = 21474836472018-09-22 10:24:14.704 INFO 18444 --- [ hystrix-user-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client user initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=usercurrent 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@1e59351c2

注:本文为原创作品,转载请标明出处。