SpringCloud 商城系统搭建之eureka分析

访客 阅读:241 2021-03-31 13:19:05 评论:0

项目环境

1、IDE:eclipse ,maven
2、操作系统:win10
3、jdk:1.8
4、springboot 2.1.0.RELEASE ,springcloud Greenwich.SR5

SpringCloud对应SpringBoot版本如下:

springcloud 版本序列 springboot版本
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

Maven 项目搭建

第一步:创建Maven 项目(supermarker),并在pom.xml 添加相关依赖.

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> 
	<groupId>com.zzg</groupId> 
	<artifactId>supermarker</artifactId> 
	<version>0.0.1-SNAPSHOT</version> 
	<packaging>pom</packaging> 
 
	<parent> 
		<groupId>org.springframework.boot</groupId> 
		<artifactId>spring-boot-starter-parent</artifactId> 
		<version>2.1.0.RELEASE</version> 
		<relativePath /> 
	</parent> 
 
 
	<properties> 
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
		<java.version>1.8</java.version> 
		<spring-cloud.version>Greenwich.SR5</spring-cloud.version> 
	</properties> 
	 
	<dependencies> 
		<!--test--> 
		 <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-test</artifactId> 
        </dependency> 
        <!--web--> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId> 
        </dependency> 
	</dependencies> 
 
	<dependencyManagement> 
		<dependencies> 
			<dependency> 
				<groupId>org.springframework.cloud</groupId> 
				<artifactId>spring-cloud-dependencies</artifactId> 
				<version>${spring-cloud.version}</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>

第二步:创建supermarker 项目的子项目(supermarker-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.zzg</groupId> 
    <artifactId>supermarker</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
  </parent> 
  <artifactId>supermarker-eureka</artifactId> 
  	<!-- 添加服务注册中心  --> 
    <dependencies> 
        <dependency> 
            <groupId>org.springframework.cloud</groupId> 
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 
        </dependency> 
    </dependencies> 
</project>

Eureka服务发现配置

1、打开supermarker-eureka项目启动类,[email protected],表明这是个服务注册中心。

package com.zzg; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 
 
@SpringBootApplication 
@EnableEurekaServer 
public class EurekaApplication { 
 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		SpringApplication.run(EurekaApplication.class, args); 
	} 
 
} 

2、打开resources文件夹下的application.properties,添加如下配置

server.port=8081 
 
# 实例名称 名字可以自己定 
eureka.instance.hostname=eureka1 
 
# eureka client 信息是否被其他eureka client 发现它的信息 
eureka.client.register-with-eureka=false 
# 此客户端是否应该从eureka server 获取eureka注册信息 
eureka.client.fetch-registry=false 
 
#关闭保护模式 
eureka.server.enable-self-preservation=false 
#设置清理的间隔时间,毫秒单位(默认是60秒) 
eureka.server.eviction-interval-timer-in-ms=1000 
 
eureka.client.serviceUrl.defaultZone=http://localhost:8081/eureka/

3、配置文件修改好后,启动EruekaServerApplication ,访问http://localhost:8081/,看到如下界面代表eureka服务端创建成功。因为没有服务注册到eureka server红框内所有红框内没有服务实例

第三步:创建supermarker 项目的子项目(supermarker-provider),并在pom.xml 添加相关依赖.

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.zzg</groupId> 
		<artifactId>supermarker</artifactId> 
		<version>0.0.1-SNAPSHOT</version> 
	</parent> 
	<artifactId>supermarker-provider</artifactId> 
 
	<!-- 添加服务注册中心 --> 
	<dependencies> 
		<dependency> 
			<groupId>org.springframework.cloud</groupId> 
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 
		</dependency> 
		<!--h2 --> 
		<dependency> 
			<groupId>com.h2database</groupId> 
			<artifactId>h2</artifactId> 
			<scope>runtime</scope> 
		</dependency> 
		<!--spring-data-jpa --> 
		<dependency> 
			<groupId>org.springframework.boot</groupId> 
			<artifactId>spring-boot-starter-data-jpa</artifactId> 
		</dependency> 
		<!--lombok --> 
		<dependency> 
			<groupId>org.projectlombok</groupId> 
			<artifactId>lombok</artifactId> 
		</dependency> 
		<!--srping-boot-actuator--> 
		<dependency> 
			<groupId>org.springframework.boot</groupId> 
			<artifactId>spring-boot-starter-actuator</artifactId> 
		</dependency> 
	</dependencies> 
</project>

生产者配置

1、打开supermarker-provider的启动类,[email protected]

package com.zzg; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 
 
@SpringBootApplication 
@EnableEurekaClient 
public class EurekaProviderApplication { 
 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		SpringApplication.run(EurekaProviderApplication.class, args); 
	} 
 
} 

2、打开生产者的application.properties,添加如下配置

server.port=8082 
# 生产者应用名称 - 
spring.application.name=provider 
# 生产者实例名,同一个spring.application.name 名称唯一 
eureka.instance.instance-id=provider1 
         
eureka.client.register-with-eureka=true 
# 和eureka服务器通讯的URL 
eureka.client.service-url.defaultZone=http://localhost:8081/eureka/ 
 
# 设置心跳的时间间隔(默认是30秒) 
eureka.instance.lease-renewal-interval-in-seconds=5 
# eureka server 最后一次收到心跳时等待的时间,超时将会移除client(默认是90秒) 
eureka.instance.lease-expiration-duration-in-seconds=3 

3、创建一个基于H2内存数据库简单查询Controller简单证明生产者能正常访问。

controller:

package com.zzg.controller; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Predicate; 
import javax.persistence.criteria.Root; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.jpa.domain.Specification; 
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RestController; 
 
import com.zzg.dao.UserRepository; 
import com.zzg.entity.User; 
 
@RestController 
public class UserController { 
	@Autowired 
	private UserRepository userRepository; 
	 
	 
	@GetMapping("/user/{id}") 
    public User findById(@PathVariable Integer id) { 
        return userRepository.findOne(new Specification<User>() { 
			 
			@Override 
			public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { 
				// TODO Auto-generated method stub 
				 List<Predicate> predicates = new ArrayList<Predicate>(); 
	             // 用户编号 
	             predicates.add(criteriaBuilder.equal(root.<Integer> get("useId"), id)); 
	                 
				return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction(); 
			} 
		}).orElse(null); 
    } 
 
} 

dao层

package com.zzg.dao; 
 
import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 
import org.springframework.stereotype.Repository; 
 
import com.zzg.entity.User; 
 
@Repository 
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> { 
 
} 

entity层

package com.zzg.entity; 
 
 
 
import java.util.Date; 
 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
 
import lombok.Getter; 
import lombok.Setter; 
 
@Getter 
@Setter 
@Entity 
public class User { 
	@Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增长策略 
	private Integer useId; 
	 
	@Column 
	private String useName; 
	 
	@Column 
	private String useSex; 
	 
	@Column 
	private Integer useAge; 
	 
	@Column 
	private String useIdNo; 
	 
	@Column 
	private String usePhoneNum; 
	 
	@Column 
	private String useEmail; 
	 
	@Column 
	private Date createTime; 
	 
	@Column 
	private Date modifyTime; 
	 
	@Column 
	private String useState; 
} 

配置完成之后启动EurekaProviderApplication,通过浏览器访问http://localhost:9001/hi/hello ,出现如下界面证明生产者创建成功

springcloud 集成H2 内存数据库参考文章地址:https://blog.csdn.net/zhouzhiwengang/article/details/111265276

第四步:创建supermarker 项目的子项目(supermarker-consume),并在pom.xml 添加相关依赖.

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.zzg</groupId> 
		<artifactId>supermarker</artifactId> 
		<version>0.0.1-SNAPSHOT</version> 
	</parent> 
	<artifactId>supermarker-consume</artifactId> 
 
	<dependencies> 
		<dependency> 
			<groupId>org.springframework.cloud</groupId> 
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 
		</dependency> 
		<!--srping-boot-actuator --> 
		<dependency> 
			<groupId>org.springframework.boot</groupId> 
			<artifactId>spring-boot-starter-actuator</artifactId> 
		</dependency> 
		<!--lombok --> 
		<dependency> 
			<groupId>org.projectlombok</groupId> 
			<artifactId>lombok</artifactId> 
		</dependency> 
	</dependencies> 
</project>

消费者配置

[email protected]

package com.zzg; 
 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; 
 
@SpringBootApplication 
@EnableEurekaClient 
public class EurekaConsumeApplication { 
 
	public static void main(String[] args) { 
		// TODO Auto-generated method stub 
		SpringApplication.run(EurekaConsumeApplication.class, args); 
	} 
 
} 

2、打开消费者的application.properties,添加如下配置

server.port=8083 
spring.application.name=consumer 
# 
eureka.client.register-with-eureka=false 
# 和eureka服务器通讯的URL 
eureka.client.service-url.defaultZone=http://localhost:8081/eureka/ 
eureka.instance.instance-id=consumer1 

3、调用生产者
3.1 对于restful调用,springboot提供了RestTemplate,但是我们首先要将RestTemplate对象注入到spring容器中
配置类如下:

package com.zzg.config; 
 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.client.RestTemplate; 
 
@Configuration 
public class RestConfig { 
	@Bean 
    public RestTemplate restTemplate(){ 
        return new RestTemplate(); 
    } 
} 

3.2 创建一个UserConsumer 调用生产者

package com.zzg.controller; 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.client.RestTemplate; 
 
import com.zzg.entity.User; 
 
@RestController 
public class UserController { 
	@Autowired 
	private RestTemplate restTemplate; 
	 
	@GetMapping("/user/{id}") 
    public User findById(@PathVariable Integer id) { 
		return restTemplate.getForObject("http://localhost:8082/user/" + id, User.class); 
	} 
 
} 

实体对象User

package com.zzg.entity; 
 
import java.util.Date; 
import lombok.Getter; 
import lombok.Setter; 
 
@Getter 
@Setter 
public class User { 
	private Integer useId; 
	 
	private String useName; 
	 
	private String useSex; 
	 
	private Integer useAge; 
	 
	private String useIdNo; 
	 
	private String usePhoneNum; 
	 
	private String useEmail; 
	 
	private Date createTime; 
	 
	private Date modifyTime; 
	 
	private String useState; 
} 

4、启动EurekaConsumeApplication,浏览器访问http://localhost:8083/user/1,出现如下界面证明消费者创建成功

至此SpringCloud 集成eureka 服务完结。

源码地址:待补充

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号