SpringCloud feign 远程调用_努力的Java程序员的博客-程序员宅基地

技术标签: java  eureka  springCloud  

Feign

Eureka

pom

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

解释

只有Eureka是服务端,其他的都是客户端。

目录结构

在这里插入图片描述

JKEurekaApplication

springboot项目的启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * @author The Phoenix(不死人)
 * @version 1.0
 * @date 2020/3/20
 */
@SpringBootApplication      //spring boot
@EnableEurekaServer         //注册中心服务
public class JKEurekaApplication {
    
    public static void main(String[] args) {
    
        SpringApplication.run( JKEurekaApplication.class , args );
    }
}

application.yml

里边eureka的配置只是临时的,不是最优,这个需要经过大佬的测试配置,这个以后再优化,只是能跑起来。

#eureka端口号
server:
  port: 10086
#eureka服务的名字
spring:
  application:
    name: jkeureka
#eureka服务
eureka:
  server:
    enable-self-preservation: false # Eureka自我保护机制,true打开/false禁用,默认打开状态,建议生产环境打开此配置。
    eviction-interval-timer-in-ms: 5000 # 修改检查失效服务的时间
  client:
    fetch-registry: false # 定期的更新客户端的服务清单,以保证服务访问的正确性
    register-with-eureka: false # 是否将自己注册为服务
    service-url:
      defaultZone: http://127.0.0.1:${
    server.port}/eureka # eureka服务的开放地址

服务提供方

目录结构

在这里插入图片描述

pom

提供反不需要导入feign坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

MemberApplication

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient      //eureka客户端
public class MemberApplication {
    
    public static void main(String[] args) {
    
        SpringApplication.run(MemberApplication.class, args);
    }
}

application.yml

#端口号
server:
  port: 7070

spring:
  application:
    name: memberservice   #服务名
  datasource:           #数据源配置
    url: jdbc:mysql://127.0.0.1:3306/jk_source?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 12
    druid:              #druid连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 1000
      test-on-borrow: true
#配置eureka(注册中心)
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1
    instance-id: ${
    eureka.instance.ip-address}.${
    server.port}
    lease-renewal-interval-in-seconds: 3
    lease-expiration-duration-in-seconds: 10

MemberArchivesController

import com.czxy.jk.BaseResult;
import com.czxy.jk.common.Page;
import com.czxy.jk.member.MemberArchivesApi;
import com.czxy.jk.member.MemberProfile;
import com.czxy.jk.service.MemberArchivesService;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.UUID;

@RestController
@RequestMapping("/member")
public class MemberArchivesController {
    
    //服务调用方 会根据 远程调用得到对应的controller
    @PostMapping("/loginPhon")
    public MemberProfile loginPhon(@RequestBody MemberProfile memberProfile) {
    
        return memberArchivesService.loginPhon(memberProfile);
    }
}

服务调用方

目录结构

在这里插入图片描述

pom

必须要有的

		<!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!--feign远程调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

LoginApplication

@SpringBootApplication //springBoot配置注解
@EnableEurekaClient // 开启eureka客户端
@EnableFeignClients // 开启远程调用
public class LoginApplication {
    
    public static void main(String[] args) {
    
        SpringApplication.run(LoginApplication.class , args);
    }
}

application.yml

#端口号
server:
  port: 9090

spring:
  application:
    name: loginservice   #服务名
  datasource:           #数据源配置
    url: jdbc:mysql://127.0.0.1:3306/自己的数据库?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 12
    druid:              #druid连接池配置
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 1000
      test-on-borrow: true
#配置eureka(注册中心) 不是最优 谅解 以后会更新
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1
    instance-id: ${
    eureka.instance.ip-address}.${
    server.port}
    lease-renewal-interval-in-seconds: 3
    lease-expiration-duration-in-seconds: 10

LoginService

package com.czxy.jk.service;

import com.jk.dao.LoginMapper;
import com.jk.feign.FeignMember;
import com.jk.login.Login;
import com.jk.member.MemberProfile;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class LoginService {
    

    @Resource
    private FeignMember feignMember;


    public Login loginPhon(Login login) {
    
        MemberProfile memberProfile = new MemberProfile();
        memberProfile.setPhone(login.getPhone());
        // 远程调用 
        MemberProfile m = feignMember.loginPhon(memberProfile);
        Login l = new Login();
        l.setUsername(m.getName());
        return l;
    }
}

FeignMember

package com.jk.feign;

import com.jk.member.MemberProfile;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * value 是服务提供方的服务名
 * path 服务提供方的 @RequestMapping("/member") 这个是作用在方法上的
 *
 *
 */
@FeignClient(value="memberservice",path = "/member")
public interface FeignMember {
    

    // 要和服务提供方 一么一样 建议复制方法 在修改成抽象方法
    @PostMapping("/loginPhon")
    public MemberProfile loginPhon(@RequestBody MemberProfile memberProfile);
}

关系

提供方的 @RequestMapping("/member") 这个是作用在方法上的
*
*
*/
@FeignClient(value=“memberservice”,path = “/member”)
public interface FeignMember {

// 要和服务提供方 一么一样 建议复制方法 在修改成抽象方法
@PostMapping("/loginPhon")
public MemberProfile loginPhon(@RequestBody MemberProfile memberProfile);

}




# 关系
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020083110310982.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDYwNTU0Mw==,size_16,color_FFFFFF,t_70#pic_center)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44605543/article/details/108316577

智能推荐

嵌入式linux的/etc/inittab解释_嵌入式 linux /etc/inittab-程序员宅基地

/etc/inittab文件中的格式id:runlevels:action:processid: 是标识名,可以任意起名,4个字符以内,要注意的是标识名不能重复,它是唯一的。runlevels: 表示这一行适用于运行那些级别(如上所示的6个级别);另外sysinit、boot、bootwait这三个进程会忽略这个设置值。此项可以多选,比如要运行1,2,3个级别,就写成123action: ..._嵌入式 linux /etc/inittab

IOI2020集训队作业-23 (CF674F,ARC091F)-程序员宅基地

B - CF674F Bears and JuiceSol最后我们得到的信息是:每头熊有没有睡觉,以及如果睡觉了是在哪一天睡的。我们可能得到的信息的种数显然是桶数量的一个上界。假设总共有ddd天,信息种数就是:∑i=0min⁡{p,n−1}di(ni)\sum_{i=0}^{\min\{p,n-1\}} d^i {n\choose i}i=0∑min{p,n−1}​di(in​)其中i...

android 通过包名启动其他app并打开指定的页面_getappopenintentbypackagename-程序员宅基地

public static Intent getAppOpenIntentByPackageName(Context context,String packageName){ //Activity完整名 String mainAct = null; //根据包名寻找 PackageManager pkgMag = context.getPackageManager..._getappopenintentbypackagename

docker-compose容器编排的使用-程序员宅基地

目录1. 介绍2. docker-compose的下载和卸载3. compose使用的步骤4. docker-compose常用命令5. docker-compose.yml编写6. 使用docker compose命令进行一键启动和停止1. 介绍docker-compose主要负责对单服务器上的多个Docker容器进行编排一般一个容器中只运行一个服务。Compose允许用户通过一个单独的docker-compose.yml模板文件,来定义一组相关联的容器为一个项目(project)。可以同时启动、停_docker-compose容器编排的使用

MFC之CFont_如何清空cfont-程序员宅基地

BOOL CreateFont(int nHeight,int nWidth,int nEscapenment,intnOrientation,int nWeight,BYTE bItalic,BYTE bUnderline,BYTE cStrikeOut,BYTE nCharset,BYTE nOutPrecision,BYTE nClipPrecis_如何清空cfont

随便推点

mysql中的设置varchar长度问题_varchar长度短-程序员宅基地

mysql中的设置varchar长度问题如果某一项中设置的是varchar(50)那么对英文当然是50那么对中文呢utf-8的中文占3个字节那么,这个varchar(50)是不是只能存16个汉字了?mysql varchar(50) 不管中文 还是英文 都是存50个的MySQL5的文档,其中对varchar字段类型这样描述:varchar(m) 变长_varchar长度短

SpringCloud熔断机制大概什么意思_spring cloud自动熔断是什么意思-程序员宅基地

什么是springcoud的熔断机制,熔断机制是对分布式架构项目的一种起到保护作用的手段或者机制,就像继电器里面的保险丝,到达某个临界点就会自动熔断保险丝,以达到保护电路的作用,切换到SpringCloud里面也是同样的道理,是从可用性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段,也就是熔断机制。springcloud的熔断机制触发一般是因为某个服务的故障所引起,及时的进行熔断,避免了雪崩效应的出现。..._spring cloud自动熔断是什么意思

(二)Java中Socket的用法-读书笔记-程序员宅基地

Java中Socket的用法_java中socket的用法

Okhttp3源码分析之一-程序员宅基地

一、OKHTTP简介OKHttp是一个处理网络请求的开源项目OKHttp GitHub地址OKHttp优点支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。) socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器...

关于私有云桌面的理解(汇总转载)_私有云桌面磁盘io-程序员宅基地

转载文章一:https://blog.csdn.net/bqwyq/article/details/97760278还记得用 “冰山理论”解释了传统PC的使用成本吗?并且还答应了大家这周要对云桌面与传统PC的成本作具体对比。当然要说到做到啦,现在跟我一起来看看是哪六项吧!1、总的采购成本对比普通PC:单台PC成本4000-4500元,按4500元来算;普通云桌面:所有云配置+云终端硬..._私有云桌面磁盘io

MyBatis详解(一):入门程序_mybatis下面哪个步骤不是编写入门程序的步骤?-程序员宅基地

MyBatis详解(一):入门程序目录MyBatis详解(一):入门程序一、对原生态jdbc程序中问题总结1.1、原始jdbc程序步骤:1.2、原生态jdbc程序问题总结二、mybatis框架2.1、mybatis是什么2.2、mybatis框架示意图​三、入门程序3.1、jar包3.2、在src下建立log4j.properties文件(file)..._mybatis下面哪个步骤不是编写入门程序的步骤?