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

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

正文:在其他模块进行调用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.springf[email protected]1e59351c
2

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

原文地址:https://www.cnblogs.com/zhznb/p/9689673.html

时间: 2024-08-01 13:03:12

微服务之不同服务间进行接口调用的相关文章

【课程分享】深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)

深入浅出微信公众平台实战开发(微网站.LBS云.Api接口调用.服务号高级接口) 课程下载地址:链接:http://pan.baidu.com/share/link?shareid=2214724072&uk=3611155194 密码:glvc 一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 微信公众平台的火热程度已经不用多言,无论是个人还是企业,政府还是商家,都已经开始搭建微信公众平台,微信的作用已经被各界人士认可.微信公众平台的技术需求市场缺口巨大. 1.2.课程内容简介 本

SpringCloud微服务之跨服务调用后端接口

SpringCloud微服务系列博客: SpringCloud微服务之快速搭建EurekaServer:https://blog.csdn.net/egg1996911/article/details/78787540 SpringCloud微服务之注册服务至EurekaServer:https://blog.csdn.net/egg1996911/article/details/78859200 SpringCloud微服务之集成thymeleaf访问html页面/静态页面&热部署:https

微服务架构与服务治理

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理等操作提供了一种简单的开发方式. Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config.Spring Cloud Netflix.Spring Cloud0 CloudFoundry.Spring Cloud AW

高可用集群技术之heartbeat+NFS实现web服务高可用(文本方式配置接口--gui图形配置)

一.高可用集群基本概念   什么是高可用技术呢?在生产环境中我既要保证服务不间断的服务又要保证服务器稳定不down机,但是异常还是会发生,比如说:服务器硬件损坏...导致服务器down机,我该如何保证服务器down机后继续提供服务呢?这时我就应该请出高可用技术来帮忙了,当我们的服务器发生故障后不能继续时,高可用集群技术解决将业务及服务自动转移至其他主机服务器上继续服务,保证服务架构不间断运行. 高可用集群的架构层次: 后端主机层: 这一层主要是正在运行在物理主机上的服务. 2.Message l

服务 远程服务 AIDL 进程间通讯 IPC

Activity aidl接口文件 package com.bqt.aidlservice;  interface IBinderInterface {     /* 更改文件后缀为[.aidl]去掉public等所有修饰符.         更改后,会在gen目录下生成一个同名的.java文件,此java文件中有一个名为[Stub]的内部类,此内部类继承自Binder类且实现了我们这里定义的IBinderInterface接口         此内部类的[asInterface(IBinder

【微服务架构】SpringCloud之Eureka(服务注册和服务发现基础篇)(二)

上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon),Archaius,Turbine等  今天学习的是Eureka即注册中心 一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实

Spring Cloud构建微服务架构:服务消费(基础)

使用LoadBalancerClient 在Spring Cloud Commons中提供了大量的与服务治理相关的抽象接口,包括DiscoveryClient.这里我们即将介绍的LoadBalancerClient等.对于这些接口的定义我们在上一篇介绍服务注册与发现时已经说过,Spring Cloud做这一层抽象,很好的解耦了服务治理体系,使得我们可以轻易的替换不同的服务治理设施. 从LoadBalancerClient接口的命名中,我们就知道这是一个负载均衡客户端的抽象定义,下面我们就看看如何

Spring Cloud构建微服务架构-Hystrix服务降级

在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,线程资源无法释放,最终导致自身服务的瘫痪,进一步甚至出现故障的蔓延最终导致整个系统的瘫痪.如果这样的架构存在如此严重的隐患,那么相较传统架构就更加

springcloud微服务系列之服务注册与发现组件Eureka

一.Eurake的简介二.使用Eureka进行服务的注册消费1.创建一个服务注册中心2.创建服务的提供者3.创建服务的消费者总结 一.Eurake的简介 今天我们来介绍下springcloud的核心组件Eureka,Eurake是负责微服务架构中服务治理的功能,负责各个服务实例的注册与发现. Eureka包含了服务器端和客户端组件.服务器端,也被称作是服务注册中心,用于提供服务的注册与发现. 客户端组件包含服务消费者与服务生产者.在应用程序运行时,服务生产者向注册中心注册自己的服务实例,当消费者