1. 程式人生 > >微服務之不同服務間進行介面呼叫

微服務之不同服務間進行介面呼叫

前言:最近在做專案時用到了微服務的架構。本篇文章主要說明微服務之間讓服務進行通訊。

正文:在其他模組進行呼叫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改變的是註冊的預設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 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.springf[email protected]1e59351c
2

注:本文為原創作品,轉載請標明出處。