基于 Spring Boot 2.0 的微服务实战项目
作 者:爱吃辣的穿越人海
链 接:www.jianshu.com/p/ceff17fae11f
>><<
前言
这里会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括Eureka,Hystrix,Zuul,Ribbon等。 这里的核心内容是服务发现模块:Eureka 创建服务注册中心。
1. 创建基于Web的Maven项目(Spring Cloud)
2. 创建服务注册中心。在Spring Cloud项目中创建Spring Boot项目(Spring Boot):
勾选Cloud Discovery–>Eureka server。以方便导包
3. 编写Spring Boot项目
3.1查看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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hand</groupId>
<artifactId>springclouddemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springclouddemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
4. 在启动类上加上注解 如下
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话。这一步非常的简单,只需要在一个普通的Spring Boot应用中添加这个注解就能开启此功能,比如下面的例子:
@SpringBootApplication
@EnableEurekaServer
public class SpringclouddemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringclouddemoApplication.class, args);
}
}
5. 修改application.yml文件
yml文件的好处,天然的树状结构,一目了然
---
#端口号
server:
port: 8760
eureka:
instance:
hostname: localhost
client:
# eureka.client.registerWithEureka :表示是否将自己注册到Eureka Server,默认为true。
# 由于当前这个应用就是Eureka Server,故而设为false
register-with-eureka: false
# eureka.client.fetchRegistry :表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,
# 不需要同步其他的Eureka Server节点的数据,故而设为false。
fetch-registry: false
service-url:
# eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,
#查询服务和注册服务都需要依赖这个地址。默认是
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
6. 启动项目后访问
http://localhost:8760 可以看到下面的页面,其中还没有发现任何服务:
7. 搭建服务端(生产者)
创建springBoot项目同上 查看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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hand</groupId>
<artifactId>producer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>producer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
8. 修改application.yml文件
注:端口不能与上面的相同。这里的服务name:service-hi 可以根据自己情况定义。
---
server:
port: 8762
eureka:
client:
service-url:
defaultZone: http://localhost:8760/eureka/
spring:
application:
name: service-producer
9. 编写启动类
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String home(@RequestParam String name) {
return "hi " + name + ",i am from port:" + port;
}
}
运行服务
http://localhost:8761/hi?name=xiong.zhang@hand-china.com
然后查看http://localhost:8760 可以看到,我们定义的服务被注册了。如下图所示:
10. 创建消费者
10.1 创建消费者modul,流程如上述工程创建流程。
10.2 查看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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hand</groupId>
<artifactId>customer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>customer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
11. yml配置
---
server:
port: 8763
eureka:
client:
service-url:
defaultZone: http://localhost:8760/eureka/
spring:
application:
name: service-customer
feign:
hystrix:
enabled : true
12. 编写启动类
@EnableDiscoveryClient表明标注类是消费者,加入restTemplate以消费相关的服务
@SpringBootApplication
@EnableDiscoveryClient
public class CustomerApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
13 .创建service和controller
13.1 service层
@Service
public class HelloService {
@Autowired
RestTemplate restTemplate;
public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-PRODUCER/hi?name=" + name, String.class);
}
}
13.2 controller层
@RestController
public class HelloControler {
@Autowired
HelloService helloService;
@RequestMapping(value = "/hi")
public String hi(@RequestParam String name) {
return helloService.hiService(name);
}
}
再次查看服务
在浏览器中输入http://localhost:8763/hi?name=admin
广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶。导致用户接受文章不及时。您可以打开订阅号,选择置顶(标星)公众号,重磅干货,第一时间送达!
推荐阅读
1.
2.
3.
4.
基于 Spring Boot 2.0 的微服务实战项目相关推荐
- 【最新最全】Java微服务实战项目【尚医疗】_智慧医疗管理项目_基于若依框架快速开发
尚医疗是专门为各大医院.门诊提供的一款医疗管理平台.系统包含:系统管理.药品进销存管理.看病就诊.收费管理.检查管理.数据统计等核心模块.通过尚医疗系统可以快速.方便的管理病人从挂号到门诊结束所涉及到 ...
- go设置后端启动_名企实习项目|后端开发岗go微服务实战项目启动,大牛导师带你拿offer!...
「DAC实习项目早知道」 今天是第2期实习项目推送 --go微服务实战项目-- 岗位职责 Position Description 1.负责协助高质量的设计和编码: 2.主要语言为Golang: 3. ...
- go设置后端启动_名企实习项目 | 后端开发岗go微服务实战项目启动,大牛导师带你拿offer!...
「DAC实习项目早知道」 今天是第2期实习项目推送 --go微服务实战项目-- 微服务是近年来非常流行的架构,是后端开发工程师必备技能. 什么是微服务? 微服务(Microservices Archi ...
- Java微服务实战项目推荐
以下是我推荐的几个Java微服务实战项目: Spring Cloud微服务电商项目:这是一个完整的电商应用程序,使用Spring Cloud实现微服务架构.它包括注册中心.配置中心.网关.商品服务.订 ...
- 基于SpringBoot 2.0正式版的SpringCloud的微服务实战项目搭建
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...
- 基于Spring Boot 2.0的IoT应用集成和使用CSE实践
本文通过一个IoT的应用展现在Spring Boot 2.0中集成和使用CSE.IoT应用原来使用Spring Boot 2.0开发,通过少量的步骤集成CSE,然后展现了集成后带来了哪些新特性,以及中 ...
- TDengine 入门教程⑪——基于Spring Boot+Alibaba Druid框架的智能电表项目的后端时序数据库开发实战
文章目录 一.前文 二.工程依赖 三.配置数据源 四.数据库连接池 五.电表数据实体类 六.数据库建表 七.业务Service层 八.总结 一.前文 TDengine 入门教程--导读 本开发实战配置 ...
- 基于 Spring Boot 的车牌识别系统(附项目地址)
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! gitee开源地址 " https://git ...
- 基于 Spring Boot 的车牌识别系统(附项目地址)ba
gitee开源地址 " https://gitee.com/admin_yu/yx-image-recognition 嘿嘿,胖友给艿艿的 https://github.com/YunaiV ...
最新文章
- PEP8 Python
- visual studio 2010 professional , premium, ultimate各版本功能对比
- 基于Huffman算法和LZ77算法的文件压缩的改进方向
- Spark-submit提交任务到集群
- Asp.Net Core使用Skywalking实现分布式链路追踪
- 计算机系统由低到高分层,下列选项列出计算机系统由低到高分层顺序中.doc
- python exceptions怎么用_Python基础介绍 | Exceptions异常
- MOOS学习笔记3——命令行
- jQuery引起的用layer弹出层上传文件不能获取文件名的解决(thinkphp5)
- 赋能IT,创新价值——互联网时代企业IT转型实践
- 追剧人的福利来了,这几款APP让你痛快追剧
- 输入框输入手机号并匹配历史记录
- PAT 乙级 1070 结绳
- 论文笔记:基于深度学习的遥感影像变化检测综述
- 《大数据系统基础》课程实践项目中期答辩顺利举行,清华持续探索大数据人才教育创新之路...
- 2.4G无线小模块CI24R1超低成本
- We are learning by contributing | 访 StarRocks Committer 周康、冯浩桉
- Workflow设计模式指的什么?
- SL3037B 60V输入0.6A输出 非同步整流DCDC转换器 兼容SCT2601
- 【华为诺亚方舟实验室】招聘:决策推理(强化学习)研究方向(实习、应届、社招、博后)均可以