SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
来源:互联网 发布:CSI网络犯罪调查百度云 编辑:程序博客网 时间:2024/05/16 05:56
前面介绍过dubbo远程接口调用的简单使用,这里我们将开始学习如何使用springcloud微服务架构中的服务注册与发现。
一,eureka-server
eureka分为服务端和客户端两部分, eureka server是一个服务注册中心,类似于zookeeper,当然,也可以使用zookeeper代替,后面会详细说明。
首先,新建一个maven springboot应用,这里命名为eureka-server
1,添加依赖包
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>
2,添加配置文件application.properties
#应用名称spring.application.name=eureka-server#服务端口server.port=8080#实例ip地址eureka.instance.hostname=localhost#设置当前的eureka服务禁止被当做客户端注册eureka.client.register-with-eureka=falseeureka.client.fetch-registry=false#设置服务发现地址eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/3,启动类Application.java添加注解@EnableEurekaServer
package com.example;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class Application {public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);}}4,启动访问,此时还没有任何服务注册
二,eureka-client
还是新建一个maven springboot应用,这里命名为eureka-client
1,添加依赖包
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
2,添加application.properties配置
spring.application.name=eureka-clientserver.port=8081eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
3,启动类Application.java添加注解注册服务@EnableDiscoveryClient
package com.example;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class Application {public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);}}
4,启动后刷新eureka-server界面,会发现多了一个注册的客户端实例eureka-client
上面简单演示了使用eureka发现和注册服务,下面我们来看,如何使用feign来实现远程接口的调用。
还是新建一个maven springboot应用,这里命名为eureka-feign
1,添加依赖包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>2,添加配置application.properties
spring.application.name=eureka-feignserver.port=8082eureka.client.serviceUrl.defaultZone=http://localhost:8080/eurekafeign.httpclient.enabled=truefeign.compression.request.enabled=truefeign.compression.request.mime-types=application/jsonfeign.compression.request.min-request-size=2048feign.compression.response.enabled=true
3,Application.java启动类开启注解@EnableFeignClients
package com.example;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.feign.EnableFeignClients;import org.springframework.context.annotation.Bean;import feign.Request;@EnableFeignClients@EnableDiscoveryClient@SpringBootApplicationpublic class Application {public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);}/** * 自定义feign连接超时时间 * @return */@Bean Request.Options feignOptions() { return new Request.Options(/**connectTimeoutMillis**/1000 * 1000, /** readTimeoutMillis **/1000 * 1000); }}4,启动,刷新eureka-server界面,可以看到服务已经注册成功
5,添加测试类,从eureka-feign服务中调用eureka-client中的接口
(1) 在eureka-feign中添加TestController.java
package com.example;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController { @Autowired TestClient testClient; @RequestMapping(value="/test",method=RequestMethod.GET) public String test() { String msg = testClient.test(); return msg; }}(2) 定义接口TestClient.java,指定实现服务的@FeignClient("eureka-client")
package com.example;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@FeignClient("eureka-client")public interface TestClient { @RequestMapping(value="/test",method=RequestMethod.GET) String test();}
(3) 在eureka-client中添加接口实现
package com.example;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController { @RequestMapping(value="/test",method=RequestMethod.GET) public String test() { String msg = "this service is eureka-client"; return msg; }}注意:feign接口调用使用的仍然是http协议,且支持spring注解,参数需与调用方一致。
接下来启动服务,访问http://localhost:8082/test,查看测试结果:
6,feign还支持负载均衡,不需要额外配置,继续保存服务开启状态,修改eureka-client的port=8083,然后启动
此时有两个eureka-client实例提供服务:
再次访问http://localhost:8082/test,这里共测试了4次,查看控制台日志,端口为8081和端口为8083的服务各调用了两次。
8081端口日志:
2017-08-09 16:50:24.671 INFO 3104 --- [ main] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1502268624671, current=UP, previous=STARTING]2017-08-09 16:50:24.674 INFO 3104 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8081: registering service...2017-08-09 16:50:24.739 INFO 3104 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8081 - registration status: 2042017-08-09 16:50:24.823 INFO 3104 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)2017-08-09 16:50:24.825 INFO 3104 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 80812017-08-09 16:50:24.830 INFO 3104 --- [ main] com.example.Application : Started Application in 8.949 seconds (JVM running for 9.584)2017-08-09 16:53:24.596 INFO 3104 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'2017-08-09 16:53:24.598 INFO 3104 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started2017-08-09 16:53:24.634 INFO 3104 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 36 ms--------------this service is eureka-client--------------this service is eureka-client2017-08-09 16:55:24.319 INFO 3104 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration8083端口日志:
2017-08-09 16:54:02.333 INFO 4640 --- [ main] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1502268842333, current=UP, previous=STARTING]2017-08-09 16:54:02.336 INFO 4640 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8083: registering service...2017-08-09 16:54:02.413 INFO 4640 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_EUREKA-CLIENT/PC-201611261236:eureka-client:8083 - registration status: 2042017-08-09 16:54:02.466 INFO 4640 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8083 (http)2017-08-09 16:54:02.467 INFO 4640 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 80832017-08-09 16:54:02.477 INFO 4640 --- [ main] com.example.Application : Started Application in 8.863 seconds (JVM running for 9.467)2017-08-09 16:54:05.998 INFO 4640 --- [nio-8083-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'2017-08-09 16:54:05.999 INFO 4640 --- [nio-8083-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started2017-08-09 16:54:06.027 INFO 4640 --- [nio-8083-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 28 ms--------------this service is eureka-client--------------this service is eureka-client2017-08-09 16:59:01.991 INFO 4640 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
四,上面我们提到过,服务注册不一定要用eureka,下面我们使用zookeeper来代替使用。
首先,对eureka-feign和eureka-client进行改造,主要是配置修改。
1,修改依赖包,将eureka包注释掉,添加zookeeper依赖
<!-- <dependency> --><!-- <groupId>org.springframework.cloud</groupId> --><!-- <artifactId>spring-cloud-starter-eureka</artifactId> --><!-- </dependency> --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-all</artifactId> </dependency>2,将application.properties中的eureka服务地址注释掉
#eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka3,添加bootstrap.properties,指定zookeeper地址
spring.cloud.zookeeper.connectString=localhost:2181spring.cloud.zookeeper.discovery.instancePort=${server.port}4,其他配置都不变,开启zookeeper,然后同时开启eureka-feign和eureka-client
访问http://localhost:8082/test,同样可以得到相同的测试结果:
阅读全文
0 0
- SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
- springcloud学习笔记一:eureka服务注册与发现
- SpringCloud教程一:服务注册与发现(Eureka)
- SpringCloud服务的注册与发现(Eureka)
- SpringCloud的服务注册与发现Eureka
- springcloud eureka服务注册与发现
- springcloud(第三篇)springcloud eureka 服务注册与发现
- springcloud(第一篇)springcloud eureka 服务注册与发现
- springcloud(第三篇)springcloud eureka 服务注册与发现 *****
- springcloud(第三篇)springcloud eureka 服务注册与发现
- eclipse springcloud服务发现服务注册(Eureka) 学习日志
- SpringCloud--服务的注册与发现(Eureka)
- SpringCloud : 服务的注册与发现(Eureka)
- SpringCloud第一篇-Eureka:服务的注册与发现
- 【Spring Cloud】--SpringCloud的服务注册与发现【Eureka】
- springCloud学习01之eureka服务发现-提供者-消费者ribbon/feign-负载均衡
- SpringCloud服务发现Eureka
- Eureka服务注册与发现
- C语言(17)孪生素数问题
- 奇怪的群名片
- C++ Excel库使用记录
- 1123. Is It a Complete AVL Tree (30)
- hdu
- SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
- 二维数组
- python中的try/except/else/finally语句
- 小P的故事——神奇的发票报销(背包问题)
- WebService的学习笔记00
- redis安装配置
- DeepFashion︱衣物时尚元素关键点定位+时尚元素对齐技术
- Ubuntu14.04中创建SWAP交换分区
- 快速简单理解——直接插入排序