什么是Eureka?
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Spring Cloud将它集成在其他子项目spring-cloud-netflix中,以实现spring cloud服务发现功能。
Spring Cloud和Dubbo
SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题
content | Dubbo | Spring Cloud |
服务注册中心 | zookeeper | Spring Cloud Netflix Eureka |
服务调用方式 | RPC | REST API |
服务网关 | 无 | Spring Cloud Netflix Zuul |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
关于Eureka和Dubbo那些事,推荐以下几篇博客参考:
微服务架构的基础框架选择Spring Cloud还是Dubbo?:https://blog.csdn.net/kobejayandy/article/details/52078275
为什么Eureka比ZooKeeper更适合做服务发现与注册服务:https://blog.csdn.net/coorz/article/details/70921252
服务发现和注册和Eureka详细讲解:https://blog.csdn.net/zhanglh046/article/details/78651914
一、创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。
下面以创建server为例子,详细说明创建过程:
1、File-->New-->Project
2、New Project-->Spring Initializr
3、填写Group和Artifact
4、选择Eureka
5、完成后弹出窗口选New Windows
6、pom.xml
4.0.0
com.eurekaserver
eurekaserver
0.0.1-SNAPSHOT
jar
eurekaserver
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
UTF-8
UTF-8
1.8
Finchley.RC2
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
二、启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加
package com.eurekaserver.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
三、修改配置文件
server.port=8761
#注册中心默认端口就是8761,也可通过下面的方式定义其他端口
#eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
四、启动访问--debug模式可以断点调试
五、创建服提供者
这里就直接提供配置文件和主要代码了,建项目步骤同上。
1、修改配置文件
需要指明spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name 。
你会发现一个服务已经注册在服务中了,服务名为HELLO-SERVICE,端口为8764
server.port=8764
spring.application.name=hello-service
#eureka注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
2、pom.xml
4.0.0
com.eurekaclient
eurekaclient
0.0.1-SNAPSHOT
jar
eurekaclient
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.2.RELEASE
UTF-8
UTF-8
1.8
Finchley.RC2
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
3、编写服务
package com.cloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${server.port}")
String port;
@RequestMapping("/hi")
@ResponseBody
public String home(@RequestParam String name) {
System.out.println("hi "+name+",i am from port:" +port);
return "hi "+name+",i am from port:" +port;
}
}
4、修改启动类添加注解@EnableEurekaClient表明自己是一个服务提供者
package com.eurekaclient.eurekaclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;
@EnableEurekaClient
@SpringBootApplication
@ComponentScan("com.cloud.*")
public class EurekaclientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaclientApplication.class, args);
}
}
5、启动访问查看服务
到这里,Spring Cloud的服务注册发现Demo已经完成,下一遍博客将介绍服务消费者Feign/Ribbon。
Spring Boot与Spring Cloud学习使用可参看笔者博客
①Spring Cloud入门教程之服务注册与发现Eureka
②Spring Cloud入门教程之服务消费者 Ribbon
③Spring Cloud入门教程之服务消费者 Feign
④Spring Cloud入门教程之断路器 Hystrix
⑤Spring Cloud入门教程之断路由网关 Zuul
⑥Spring Cloud入门教程之分布式配置中心 Spring Cloud Config
⑦idea下新建Spring Boot项目并配置启动
⑧Spring Boot无法自动注入bean问题解决方案
⑨idea 设置Spring Boot热部署