入门Eureka
- 注意版本问题哈
- 注意版本问题哈
- 注意版本问题哈
- 重要的事情说三遍!!!!!!!!!!!!
1、创建一个maven项目
2、导入依赖
- 【spring-cloud】--------------------------------------------------------spring-cloud
- 【spring-boot、spring-boot启动器】----------------------------spring-boot
- 【mysql、mybatis、durid数据库连接池】---------------------数据库
- 【lombok】-------------------------------------------------------------------lombok
- 【log4j、logback-core】---------------------------------------------日志
<dependencyManagement>
<dependencies>
<!-- spring-cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!-- 德鲁伊数据池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.18</version>
</dependency>
<!-- springboot启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<!-- 测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
<!-- 日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
- 使用dependencyManagement后,子项目就可以直接从父项目中导入依赖,而不是从mvn仓库或者本地仓库去下载了
3、创建数据库
- 创建一个数据库cloud01
- 创建一张表
create table student
(
sno bigint auto_increment,
sname varchar(60) null,
db_source varchar(60) null,
constraint student_pk
primary key (sno)
)
- 插入字段
insert into student(sname,db_source) values('张三',DATABASE());
insert into student(sname,db_source) values('李四',DATABASE());
insert into student(sname,db_source) values('王五',DATABASE());
insert into student(sname,db_source) values('赵六',DATABASE());
insert into student(sname,db_source) values('周七',DATABASE());
4、创建子项目api
-
命名为springcloud-api【提供实体类】
-
导入依赖
-
这里就可以从父项目中导入自己需要的依赖了
-
<!-- 从父依赖中导入--> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
-
创建包
-
-
导入java代码
-
@Data @AllArgsConstructor @NoArgsConstructor public class Student { private Long sno; private String name; private String db_source; }
5、创建子项目provider
- 导入依赖
<!-- api、druid、 mysql,mybtis,mybatis-spring-boot -->
<dependencies>
<dependency>
<groupId>com.packet</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jetty-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
-
创建包mapper、service、controller
-
编写简单的配置、并连接数据库
-
写一个查询语句
-
select * from student
6、创建子项目eureka
-
导入依赖
-
eureka服务端依赖
-
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency>
-
编写配置文件
-
#eureka配置 eureka: instance: # 服务端 hostname: localhost client: register-with-eureka: false # 是否向注册中心注册自己 fetch-registry: false # 表示自己是否为注册中心 ,false表示自己为注册中心 service-url: defaultZone : http://${eureka.instance.hostname}:${server.port}/eureka/ server: port: 7001
-
开启注解
- 在启动类上加@EnableEurekaServer
-
在要注册服务中导包
-
<!-- eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--完善监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
-
在要注册的服务中添加注册地址
-
eureka: client: service-url: defaultZone: http://localhost:7001/eureka/
-
在需要被注册的服务的启动类上添加注解@EnableEurekaClient
总结:
给服务中心导包------>编写配置----->@EnableEurekaServer
给服务导包------>编写配置----->@EnableEurekaClient
Eureka集群
1、为什么Eureka集群?
- 如果其中的一个注册中心崩了,怎么办,是不是所有的注册的服务都不会被发现了,也没有办法使用了
- 我们将所有的eureka,关联起来,注册的时候也全部注册进去,这样一个出事,其他的还有用就行
2、如何集群
步骤一:复制eureka
-
复制一个一模一样的eureka,改个端口号
-
将其中的级联地址修改了
-
eureka-7001
-
#eureka配置 eureka: instance: # 服务端 hostname: localhost client: register-with-eureka: false # 是否向注册中心注册自己 fetch-registry: false # 表示自己是否为注册中心 ,false表示自己为注册中心 # 当是本机的时候,就是http://localhost:8080/eureka/ # 联机的时候就是别人的地址 service-url: defaultZone : http://127.0.0.1:7002/eureka/ server: port: 7001
-
eureka-7002
-
server: port: 7002 eureka: instance: hostname: 127.0.0.1 client: fetch-registry: false register-with-eureka: false service-url: defaultZone: http://localhost:7001/eureka/
-
-
两者端口号不一样
-
eureak.instance.hostname不一样
-
service-url.defaultZone不一样
- 分别管理的是第一个与第二个
步骤二:服务注册进去
将其中的服务两个都注册进去
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/
这样就可以了
Eureka获取注册中心服务的信息
前面我们只将信息注册到Eureka中,但是没有从Eureka中获取操作
大体步骤
- 创建一个消费者consumer的模块
- 从注册中心取得provider提供的服务
- 使用
详细步骤
1、创建一个消费者consumer的模块
2、导入依赖
-
【eureka】【】【web】
-
<!-- eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!-- 实体类--> <dependency> <groupId>com.packet</groupId> <artifactId>spring-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3、编写配置
-
# 端口 server: port: 80 eureka: client: register-with-eureka: false # 不想eureka中注册自己 service-url: # 取服务的地址 defaultZone: http://localhost:7001/eureka/,http://127.0.0.1:7002/eureka/
4、配置RestTemplate
-
创建包config
-
创建一个RestConfig
-
@Configuration public class RestConfig { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } }
-
5、创建包controller
-
创建一个StudentController
-
@RestController public class StudentController { //地址前缀 private static final String REST_URL_PREFIX= "http://spring-cloud-provider"; @Autowired RestTemplate restTemplate; @RequestMapping("/stAll") public String getAllStudent() { List<Student> students = restTemplate.getForObject(REST_URL_PREFIX + "/stALl",List.class); for (Student student : students) { System.out.println(student); } return "ok"; } }
-
通过RestTemplate 获取服务中的Controller的内容
-
6、添加注解@EnableEurekaClient ,开启服务
Eureka的其他配置
-
application显示UNKNOWN
-
修改方式:spring.application.name属性
-
spring: application: name: springcloud-provider
-
-
-
status:
-
up表示服务有用
-
后面的描述修改
-
instance.instance-id
-
#修改eureka默认描述信息 instance: instance-id: springcloud-provider-8001
-
-
-
修改后的样式:
6、添加注解@EnableEurekaClient ,开启服务
Eureka的其他配置
[外链图片转存中…(img-kHD76b4v-1701085802286)]
-
application显示UNKNOWN
-
修改方式:spring.application.name属性
-
spring: application: name: springcloud-provider
-
-
-
status:
-
up表示服务有用
-
后面的描述修改
-
instance.instance-id
-
#修改eureka默认描述信息 instance: instance-id: springcloud-provider-8001
-
-
-
修改后的样式: