介绍
SpringCloud是基于springBoot的一整套实现微服务的框架.Eureka为springCloud架构中首选推荐的服务治理组件.从分布式或者微服务的角度来讲,将一个大的项目划分成许多小的项目,首当其冲的第一个问题就是子项目之间如何通讯的问题.Eureka是解决微服务架构中服务实例维护的一种技术解决方案,说白了就是管理消费者和生产者注册,一下会通关两个服务来说明。
一,eureka中server的简单搭建
创建eurekaServer 服务
创建eureka的maven项目
点击下一步 点击next
等待maven加载完成如下面图
加入springcloud eureka相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>micro-serivce-demo</artifactId>
<groupId>com.huangan</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>eureka</artifactId>
<name>eureka</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- eurkaServer 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<!-- 安全依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
通关application.yml进行eureka配置
server:
port: 9100
#因为当前的eureka 是单机的,所以我们需要做一些配置
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
#defaultZone: http://localhost:9100/eureka/
defaultZone: http://user:123@localhost:9100/eureka/
security:
basic:
enabled: true #开启安全配置,也就是需要密码,如果不需要设置为 false 即可,注意这个参数必须放在 application.yml中不允许放在boostrost
user:
password: 123 #设置账户名与密码
name: user
声明(默认配置eureka配置时可以吧defaultZone 写成自己eureka服务的路径,因为如果不写入他会自己去找服务的注册,如果没有就会异常输出,如果不配置账号密码,服务启动时会在后台生成密码,
如果不想配置密码,security:basic:enabled: false,吧defaultZone 改为http://localhost:9100/eureka/即可,后面需要自己获取后台输出的密码)
创建eureka启动来
package com.huangan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Hello world!
*
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp
{
public static void main( String[] args )
{
SpringApplication.run(EurekaApp.class);;
}
}
启动服务,访问eureka地址:http://localhost:9100/eureka/
通关上面路径访问输入账号密码,就会显示eureka的管理页面,Application下面就是注册的服务,下面就是服务的注册于发现。
二,消息生产者proviede-rorder服务注册
下面的代码细节不会多讲,以上在文章https://blog.csdn.net/weixin_45863786/article/details/109521592 详细创建说明过
导入eureka的依赖
<!-- eurka客户端 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yml的配置
server:
port: 7900 #程序启动服务的端口号
spring:
application:
name: provider-user #访问应用的名称
eureka:
client:
service-url:
defaultZone: http://user:123@localhost:9100/eureka
编写启动类
package com.huangan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* Hello world!
*
*/
@SpringBootApplication
@EnableEurekaClient
public class UserApp
{
public static void main( String[] args )
{
SpringApplication.run(UserApp.class);
}
}
运行服务,通关eureka服务管理界面查看服务是否被注册
通过上面,以及发现provider-user服务以及注册了,下面就是通过consumer-order服务进行eureka注册且使用RestTemplate 获取信息
三,消息消费者consumer-order服务注册
、导入eureka的依赖
<!-- eurka客户端 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置application.yml文件
server:
port: 8900
spring:
application:
name: consumer-order
url:
value: http://localhost:7900/user/ #自己写了一个消息生产者地址
eureka:
client:
service-url:
defaultZone: http://user:123@localhost:9100/eureka
编写控制器代码
第一种使用生产者地址获取接口数据
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate; //spring 提供访问rest接口的模板对象
@Value("${url.value}")
private String url;
@GetMapping("/order/{id}")
public User getUser(@PathVariable Long id){
User user= restTemplate.getForObject(url+"/"+id,User.class);
System.out.println("进入数据:"+user.toString());
return user;
}
}
第二种使用EurekaClient 获取生产者地址
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate; //spring 提供访问rest接口的模板对象
@Autowired
private EurekaClient eurekaClient;
@GetMapping("/order/{id}")
public User getUser(@PathVariable Long id){
InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("PROVIDER-USER",false);
String userUrl = instanceInfo.getHomePageUrl();
User user= restTemplate.getForObject(userUrl+"/user/"+id,User.class);
System.out.println("进入数据:"+user.toString());
return user;
}
}
启动服务通关eureka页面进行查询是否已注册
下一步访问consumer-order进口路径查看是否获取消费者数据
简单的实现springcloud 的eureka服务注册已完成,下一篇会讲到ribbon 多服务之间负载均衡整合配置