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


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

    正文:在其他模块进行调用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

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

    中国男儿当自强不息,厚德载物。
  • 相关阅读:
    同一位置(同一个ImageView)显示不同的图片levellist (转)
    LinearLayout android:layout_weight的理解
    给C盘减减肥,让你电脑飞一般速度!
    (Android实战)界面设计注意事项
    利用sender的Parent获取GridView中的当前行(转载)
    用SQL查看字符串ASCII码
    自己写DataPage分页
    连接长宽高的UDF
    把Dictionary绑定到combox
    trackbar和processbar功能合并
  • 原文地址:https://www.cnblogs.com/zhznb/p/9689673.html
Copyright © 2020-2023  润新知