SpringBoot2.0--SpringCloud--微服务-搭建Eureka服务发现

Eureka简介

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能

实例

1.微服务项目构建

首先创建spring-cloud文件夹,复制上个文章中的项目并修改名称为microservice-consumer-movie、microservice-provider-user(具体的代码不在这里详写了,请到https://blog.csdn.net/oGuiGui12345/article/details/89915712查看)。

然后创建SpringBoot项目microservice-discovery-eureka,并放到spring-cloud文件夹下。

创建pom.xml并放到spring-cloud文件夹下。

<?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">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<groupId>com.itmuch.cloud</groupId>
	<artifactId>microservice-spring-cloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	
	<properties>
		<java.version>1.8</java.version>
	</properties>
	
  <modules>
  	<module>microservice-consumer-movie</module>
  	<module>microservice-provider-user</module>
  	<module>microservice-discovery-eureka</module>
  </modules>
  
  <dependencies>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
   </dependency>
  </dependencies>
  
  <dependencyManagement>
  	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>2.1.4.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<!--Greenwich.RELEASE-->
		<dependency>
		    <groupId>org.springframework.cloud</groupId>
		    <artifactId>spring-cloud-dependencies</artifactId>
		    <version>Greenwich.RELEASE</version>
		    <type>pom</type>
		    <scope>import</scope>
		</dependency>
	</dependencies>
  </dependencyManagement>
  
  <build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
  </build>
</project>

然后导入spring-cloud目录下的3个项目

点击下图中的右上角的小三角,选择Projects Presentation-->Hierarchical, 显示效果如下图

2.搭建服务发现 microservice-discovery-eureka

修改pom.xml文件

<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">
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
	 <groupId>com.itmuch.cloud</groupId>
	 <artifactId>microservice-spring-cloud</artifactId>
	 <version>0.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>microservice-discovery-eureka</artifactId>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
   </dependency>
 </dependencies>
</project>

修改application.yml

  1. security表示设置Eureka服务发现登陆校验开启,同时设置用户名和密码
  2. registerWithEureka: false 和fetchRegistry: false 表示不注册服务发现自身
  3.  defaultZone: http://user:password123@localhost:8761/eureka 用户名为user 密码为password123
spring:
  security:
    user:
      name: user
      password: password123
server:
  port: 8761
  tomcat:
      uri-encoding: UTF-8
      max-http-header-size: 8096
eureka:
  client:
   registerWithEureka: false
   fetchRegistry: false
   service-url:
      defaultZone: http://user:password123@localhost:8761/eureka

创建配置类WebSecurityConfig

Spring Cloud 2.0 以上的security默认启用了csrf检验,要在eurekaServer端配置security的csrf检验为false,覆盖父类的 configure(HttpSecurity http) 方法,关闭掉 csrf

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
	/**
	 * Spring Cloud 2.0 以上的security默认启用了csrf检验
	 *    	要在eurekaServer端配置security的csrf检验为false
	 *     覆盖父类的 configure(HttpSecurity http) 方法,关闭掉 csrf
	 */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }
}

修改启动类EurekaApplication,增加@EnableEurekaServer注解开启服务发现服务

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
	
    public static void main( String[] args ){
    	SpringApplication.run(EurekaApplication.class, args);
    }
}

3.搭建微服务消费者 microservice-provider-user

修改pom.xml

<?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">
	<modelVersion>4.0.0</modelVersion>
	
	<parent>
		<groupId>com.itmuch.cloud</groupId>
		<artifactId>microservice-spring-cloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	
	<artifactId>microservice-provider-user</artifactId>
    <packaging>jar</packaging>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
			<scope>runtime</scope>
		</dependency>	
	</dependencies>

</project>

修改application.yml

  1. defaultZone: http://user:password123@localhost:8761/eureka 用户名为user 密码为password123
  2. prefer-ip-address: true 开启显示IP
  3. instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} 自定义显示格式
  4. jpa: 配置JPA打印sql等设置
  5. platform: h2 设置数据源为H2数据库
  6. schema: classpath:schema.sql   data: classpath:data.sql 加载数据
server:
  port: 7900
spring:
  jpa:
    generate-ddl: false
    show-sql: true
    hibernate:
      ddl-auto:  none
  datasource:
    platform: h2
    schema: classpath:schema.sql
    data: classpath:data.sql
  application: 
    name: microservice-provider-user
eureka:
  client:
    serviceUrl: 
      defaultZone: http://user:password123@localhost:8761/eureka
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

修改启动类,增加@EnableEurekaClient注解表示开启Eureka客户端

@SpringBootApplication
@EnableEurekaClient
public class MicroserviceSimpleProviderUserApplication {

	public static void main(String[] args) {
		SpringApplication.run(MicroserviceSimpleProviderUserApplication.class, args);
	}

}

4.搭建微服务服务者 microservice-consumer-movie

修改pom.xml

<?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">
	<modelVersion>4.0.0</modelVersion>
	
	
	
	<artifactId>microservice-consumer-movie</artifactId>
    <packaging>jar</packaging>

    <parent>
		<groupId>com.itmuch.cloud</groupId>
		<artifactId>microservice-spring-cloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	
	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
	</dependencies>

</project>

修改启动类,加入@EnableEurekaClient注解开启Eureka客户端服务

@SpringBootApplication
@EnableEurekaClient
public class MicroserviceSimpleConsumerMovieApplication {

	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);
	}

}

修改application.yml

spring:
  application: 
    name: microservice-consumer-movie
server:
  port: 7901
user:
  userServicePath: http://localhost:7900/simple/
eureka:
  client:
    serviceUrl: 
      defaultZone: http://user:password123@localhost:8761/eureka
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

测试结果

首先启动microservice-discovery-eureka 再启动microservice-consumer-movie 和microservice-provider-user

输入http://localhost:8761/ 输入用户名和密码正确后,展示Eureka首页。

Instances currently registered with Eureka中已显示注册了2个微服务项目分别是microservice-consumer-movie microservice-provider-user,服务发起搭建完成

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值