美文网首页springcloud
使用spring-cloud-feign调用非eureka管理的

使用spring-cloud-feign调用非eureka管理的

作者: 闲看热闹的 | 来源:发表于2017-10-24 23:08 被阅读0次

在使用spring cloud进行日常开发过程中,会到遇到需要集成已有的一些服务或者第三方服务,但这些服务并未使用eureka管理,在使用spring-cloud-feign集成时与集成受eureka管理服务使用方式有差别,以下为相关要点记录

该项目使用gradle管理依赖,相关配置如下:

buildscript {
    ext {
        springBootVersion = '1.5.8.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.example.cloud'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


ext {
    springCloudVersion = 'Dalston.SR4'
}

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-eureka')
    compile('org.springframework.cloud:spring-cloud-starter-feign')
    compile('org.springframework.cloud:spring-cloud-starter-hystrix')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    
    
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

当前使用服务为微服务,需要注册到eureka上,以提供给其它微服务调用,并且该服务需使用feign集成其它第三方服务,application.yml内容如下:

#name
spring:
  application:
    name: sample-service
  
#eureka config
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
  instance:
    prefer-ip-address: true

主类配置如下:

@EnableDiscoveryClient //启用服务发现客户端
@SpringBootApplication
@EnableFeignClients //启用feignClient
public class SampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

其中该服务中需要使用feign额外调用外部的A服务,A服务非eureka管理,不能通用eureka注册的服务ID进行访问,该服务完整地址为:http://service-a.example.com/v2/sms/singleSend
相关使用代码如下:

@FeignClient(name = "a-service", url = "http://service-a.example.com/")
public interface ServiceAFeign {
    @RequestMapping(value = "/v2/sms/singleSend", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_FORM_URLENCODED)
    public SendResponse singleSend(@RequestParam("mobile") String mobile,
            @RequestParam("text") String text);
}

重点关注@FeignClient中的配置项,其中name属性值不应该与eureka上注册的其它服务相同,以免导致feign无法正确调用,url属性值需要配置为实际调用的地址,以上两个配置项缺一不可,如未设置url属性值,只设置了name,feign会到eureka中去找注册的服务,但实际无法找到,导致无法正常调用,以上为踩坑过程。

相关文章

网友评论

    本文标题:使用spring-cloud-feign调用非eureka管理的

    本文链接:https://www.haomeiwen.com/subject/tklfpxtx.html