SpringCloud Eureka Provider及Consumer的实现

这篇文章主要介绍了SpringCloud Eureka 提供者及调用者的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Eureka-Provider 服务的提供者

新建一个服务提供者项目

1、导入pom文件

1.8Greenwich.SR3org.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-clientorg.springframework.bootspring-boot-starter-testtestorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportorg.springframework.bootspring-boot-maven-plugin

2、在启动类上加注解

@SpringBootApplication @EnablediscoveryClient // 这个注解加不加都可以,因为Eureka public class EurekaProviderApplication { public static void main(String[] args) { SpringApplication.run(EurekaProviderApplication.class, args); } }

上边那个@EnablediscoverClient 注解加不加都行的原因会在后边表名

3、在Eureka-Provider项目中添加一个简单的接口

@RestController public class EurekaProviderController { @GetMapping("/provider") public String provider(@RequestParam String aaa){ return "eureka-provider-return" + aaa; } }

4、以上配置完成之后启动Eureka-Provider

启动后会在控制台输出

discoveryClient_EUREKA-PROVIDER/192.168.1.4:eureka-provider:8000: registering service...

​同时看localhost:8761 页面的Instance currently registered 会多出一条信息

Application AMIs Availability Zones Status

EUREKA-PROVIDER n/a (1) (1) UP (1) - 192.168.1.4:eureka-provider:8000

Eureka-Consumer 服务的调用

调用者的配置和上边提供者类似,applicatioin.yml配置修改server.port=8100

1、启动类修改

@SpringBootApplication // 另一个发现服务的注解可以不用谢(SpringCloud版本要在Edgware之后) public class EurekaConsumerApplication { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(EurekaConsumerApplication.class, args); } }

2、编写一个调用接口的类

@RestController public class EurekaConsumerController { @Autowired private RestTemplate restTemplate; @GetMapping("/consumer") @GetMapping("/consumer") public String consumer(@RequestParam String aaa){ return restTemplate.getForObject("http://EUREKA-PROVIDER/provider?aaa=" + aaa,String.class ); } }

3、启动服务调用

​ 启动后,调用调用者的触发地址localhost:8100/consumer?aaa=consumerSemdParamter

​ 浏览器显示内容

eureka-provider-returnconsumerSemdParamter

上边遗留的一个问题,eureka-client不加@EnablediscoveryClient以将自己注册注册中心

先看EurekaClientAutoConfiguration类中

@Configuration @EnableConfigurationProperties @ConditionalOnClass(EurekaClientConfig.class) @Import(discoveryClientOptionalArgsConfiguration.class) @ConditionalOnBean(EurekadiscoveryClientConfiguration.Marker.class) @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) @ConditionalOndiscoveryEnabled @AutoConfigureBefore({ NoopdiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class, ServiceRegistryAutoConfiguration.class }) @AutoConfigureAfter(name = { "org.springframework.cloud.autoconfigure.RefreshAutoConfiguration", "org.springframework.cloud.netflix.eureka.EurekadiscoveryClientConfiguration", "org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration" }) public class EurekaClientAutoConfiguration { }

可以看到该类加载的条件是需要有EurekadiscoveryClientConfiguration.Maker.class的Bean存在,并且eureka.client.enabled为true,因为该值认为true,所以不需要关注,因此重要的就是EurekadiscoveryClientConfiguration.Maker.class这个,而这个类在Dalston之前的旧版本是不会自动加载的,而在Edgware之后,该类就配置到spring.factories文件中了,改文件中所配置的bean在springboot启动的时候就会被加载(所以不需要手动配上注册服务的注解了,springboot会自动配置

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...