前言:最近在做項目時用到了微服務的架構。本篇文章主要說明微服務之間讓服務進行通信。
正文:在其他模塊進行調用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
注:本文為原創作品,轉載請標明出處。