简陋的spring cloud搭建并部署云服务器
目录
1.创建父项目
2.创建本地Eureka注册中心模块
1.Eureka-server
2.Eureka-client(HelloWorld)
3.总结
3.添加包含业务的eureka子模块
4.将eureka部署到云服务器
5.新建服务提供者和消费者
6.将新建模块部署到云服务器
1.创建父项目
新建一个maven项目,命名为springcloud_demo。
修改pom文件,如下:
<?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><groupId>com.xmy</groupId><artifactId>Springcloud_Demo</artifactId><version>1.0-SNAPSHOT</version><!-- 1 确定spring boot的版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version></parent><!--2 确定版本--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><spring-cloud-release.version>Greenwich.RELEASE</spring-cloud-release.version></properties><!-- 3 锁定sprig cloud版本--><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud-release.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><!-- 4 确定spring cloud私有仓库--><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>
</project>
2.创建本地Eureka注册中心模块
1.Eureka-server
右键点击父项目,选择new-module
点击next,设置Eureka子模块名称,子模块路径,点击finish完成子模块创建
修改 Eureka子模块的pom文件:
<?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>Springcloud_Demo</artifactId><groupId>com.xmy</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Eureka_Demo</artifactId><dependencies><!--web起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Eureka服务端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId><version>2.2.1.RELEASE</version></dependency></dependencies></project>
创建核心配置文件application.yml
#服务注册中心端口号
server:port: 9099# Spring
spring:application:# 应用名称name: eureka-server
eureka:instance:#服务注册中心实例的主机名hostname: localhostclient:sevice-url:#服务注册中心的配置内容,指定服务注册中心的位置defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka#是否向服务注册中心注册自己register-with-eureka: false#是否检索服务fetch-registry: false
创建Application启动类:
package com.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class,args);}
}
将EurekaApplication启动类配置到Configurations中:
点击IDEA右上角的Add Configurations按钮,点击左上角的加号按钮后点击Spring Boot选项进入设置页面,设置启动名称以及启动类文件收点击OK按钮完成设置。
运行模块,浏览器输入http://localhost:9099访问Eureka注册中心
2.Eureka-client(HelloWorld)
与server使用同样的方法:
新建子项目-->修改pom.xml,增加依赖-->修改properties.yml文件-->创建Application启动类,配置到configuration-->运行项目
<!-- Eureka客户端 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.1.RELEASE</version></dependency>
server:port: 8700 # 服务提供方,访问应用的端口#当前服务名称
spring:application:name: eureka-client
# 指定当前eureka客户端的注册地址,写服务端的信息
eureka:instance:hostname: localhostclient:service-url:defaultZone: http://localhost:9099/eurekaregister-with-eureka: truefetch-registry: false
注意,在eureka client的yml配置文件中,service-url: defaultZone写注册中心的地址和端口,而server:port写本服务的端口。另外,register-with-eureka设置为 true,表示需要在eureka中注册自己。
同时运行eureka server和eureka client,访问9099(eureka server端口),8700(eureka client端口),结果如下,说明配置成功。(注册不上时多重启几遍)
3.总结
子项目与新建spring boot项目类似,只是需要在pom文件添加eureka的依赖,并在yml文件配置注册信息。
3.添加包含业务的eureka子模块
有一个写好的spring boot demo项目,将其迁移到本项目中。
首先新建子模块,选择spring initializr,填写项目信息。
选依赖,加了一个lombok,发现这里有eureka discovery client,那就直接添加。
注:
使用DiscoveryClient可以发现注册中心上的服务,注册中心可以是Eureka,也可以是Zookeeper等,因为不使用原始Netflix EurekaClient,所以在某种包装器后面的DiscoveryClient更易于使用。它也能提供通过服务名称查询对应的所有服务实例等功能。
而eureka client通过Spring自动注入的EurekaClient,不仅能发现服务实例,还能查看客户端连接等各种配置。
新建完成,开始转移代码。按照pom、properties、Java的顺序进行。注意properties.yml文件要改写为application.properties。
先单独运行该子项目,运行成功。
重启eureka注册中心,查看是否在eureka注册成功 。可以看到两个服务都已注册成功并上线。
4.将eureka部署到云服务器
用的是腾讯云服务器。步骤见参考文章第五篇。
server面板地址
http://云服务器ip:8080/Eureka-Server/client服务地址
http://云服务器ip:8080/Eureka-Client/HelloWorld
问题:
1,eurekaserver和client都可以单独访问和运行。但reureka client服务没有在注册中心注册成功。
2,实际访问使用的是tomcat的8080端口,而不是自定义的服务端口。(即使修改tomcat配置,也是跟8080一样,后缀webapps中的文件夹名访问。如果配置多个tomcat节点,两个项目都无法访问。)
解决办法:
1,client的defaultZone注册中心地址实际上为server面板地址加后缀/eureka,即云服务器ip:8080/Eureka-Server/eureka
2,尚未解决。甚至问题增加了:为什么自定义的端口号都没用了。
5.新建服务提供者和消费者
将会新建两个服务模块,互相都为服务的提供者和消费者。
新建子模块,命名为client1。可以在创建时就加入eureka client依赖,也可以手动在pom加。
然后在application的main方法类上添加@EnableEurekaClient注解。
再在application.properties配置文件添加Eureka服务提供者的配置。
这些步骤都是前面重复过的。
新建两个类ClientController 和CustomerController分别实现服务提供者和服务消费者的功能:
//服务提供者
@RestController
public class ClientController {@GetMapping("/client1")public Object index(){String str = "这是client1提供的服务";return new String(str);}
}
//服务消费者
@RestController
public class CustomerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/get2")public Object getIndex(){//http://client2/service2:client2是调用服务者的注册服务名称return restTemplate.getForObject("http://client2/service2",String.class,"");}
}
另外还有一个配置类:
//RestTemplate 配置
@Configuration
public class Config {@Bean@LoadBalancedpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build();}
}
最后运行项目,检查注册结果:
client2的新建过程类似,它也会调用client1提供的服务。
6.将新建模块部署到云服务器
跟第四步一样。详细步骤见参考文章第五篇。
新建模块打包报错Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0。修改maven-resources-plugin的版本:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--在这里修改版本--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.4.3</version></plugin><!----></plugins>
</build>
因为重新装了tomcat,中途遇到报错Error creating bean with name 'defaultValidator' defined in class path resource。卸载tomcat 7,装tomcat 8就可以了。
http://公网ip:8080/Eureka-Server/http://公网ip:8080/Eureka-Client/HelloWorldhttp://公网ip:8080/client1/service1http://公网ip:8080/client2/service2//报500
http://公网ip:8080/client1/get2
部署结果:
但是由于前面共用8080端口号的原因,服务调用时去查找自定义的8081和8082端口是找不到的。
这个问题待解决。
7.LoadBalancer应用学习
这里参考:
Getting Started | Client-Side Load-Balancing with Spring Cloud LoadBalancer
SpringCloud LoadBalancer初体验_祈晴小义的博客-CSDN博客_spring-cloud-loadbalancer
SpringCloud使用Loadbalancer实现客户端负载均衡 - 百里浅暮 - 博客园
1.首先新建子项目Loadbalancer,选择Cloud Loadbalancer 和 Spring Reactive Web依赖。
2.在LoadbalancerApplication主程序中提供“say hello”的服务。在greeting路径下随机返回三句话之一;在空路径下返回“中秋快乐!”
@RestController
@SpringBootApplication
public class LoadbalancerApplication {private static Logger log = LoggerFactory.getLogger(LoadbalancerApplication.class);public static void main(String[] args) {SpringApplication.run(LoadbalancerApplication.class, args);}@GetMapping("/greeting")public String greet() {log.info("Access /greeting");List<String> greetings = Arrays.asList("世界上有四种辣:微辣、中辣、", "重辣、", "还有,马上就要放假辣!");Random rand = new Random();int randomNum = rand.nextInt(greetings.size());return greetings.get(randomNum);}@GetMapping("/")public String home() {log.info("Access /");return "中秋快乐!";}}
3.在resource文件夹配置文件中进行端口配置(yml或者.properties)
spring.application.name=say-helloserver.port=8085
4.新建项目Loadbalancer-user。使用LoadbalancerUserApplication来访问服务
@SpringBootApplication
@RestController
public class UserApplication {private final WebClient.Builder loadBalancedWebClientBuilder;private final ReactorLoadBalancerExchangeFilterFunction lbFunction;public UserApplication(WebClient.Builder webClientBuilder,ReactorLoadBalancerExchangeFilterFunction lbFunction) {this.loadBalancedWebClientBuilder = webClientBuilder;this.lbFunction = lbFunction;}public static void main(String[] args) {SpringApplication.run(UserApplication.class, args);}@RequestMapping("/hi")public Mono<String> hi(@RequestParam(value = "name", defaultValue = "Mary") String name) {return loadBalancedWebClientBuilder.build().get().uri("http://say-hello/greeting").retrieve().bodyToMono(String.class).map(greeting -> String.format("%s, %s!", greeting, name));}@RequestMapping("/hello")public Mono<String> hello(@RequestParam(value = "name", defaultValue = "John") String name) {return WebClient.builder().filter(lbFunction).build().get().uri("http://say-hello/greeting").retrieve().bodyToMono(String.class).map(greeting -> String.format("%s, %s!", greeting, name));}
}
5.为WebClient.Builder实例编写配置类。
该配置提供了一个@LoadBalanced WebClient.Builder实例,当有人点击UserApplication.java的hi端点时,我们会使用它。一旦点击了hi端点,我们就使用这个构建器来创建一个WebClient实例,它向Say Hello服务的URL发出一个HTTP GET请求,并将结果作为一个字符串提供给我们。
但是对于hello端点,没有使用@LoadBalanced注释,而是使用@Autowired负载平衡器交换过滤函数(lbFunction ),通过使用filter()方法将它传递给我们以编程方式构建的WebClient实例。
参考文章:
spring cloud搭建教程_CSDN砖家的博客-CSDN博客_springcloud搭建
搭建SpringCloud项目_@lehao的博客-CSDN博客_springcloud项目搭建
Spring Cloud Netflix
Spring Cloud Eureka详解_大道化简的博客-CSDN博客_eureka
https://www.jianshu.com/p/ba1dbbfa1c81
https://www.jianshu.com/p/78e8797ea804
springboot打包错误:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0..._åå的博客-CSDN博客
SpringCloud使用Loadbalancer实现客户端负载均衡 - 百里浅暮 - 博客园
简陋的spring cloud搭建并部署云服务器相关推荐
- spring cloud微服务分布式云架构 - Spring Cloud简介
Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...
- spring cloud微服务分布式云架构 - Spring Cloud简介(一)
点击上面 免费订阅本账号! 本文作者:it菲菲 原文:https://yq.aliyun.com/articles/672239? 点击阅读全文前往 Spring Cloud是一系列框架的有序集合.利 ...
- (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点
spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢? 下面我针对于spring cloud微服务分布式云架构做了以下 ...
- spring cloud微服务分布式云架构 - 整合企业架构的技术点
spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢? 下面我针对于spring cloud微服务分布式云架构做了以下 ...
- (二)spring cloud微服务分布式云架构-整合企业架构的技术点
spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?Spring Cloud大型企业分布式微服务云架构源码请加一七九 ...
- spring cloud微服务分布式云架构-Spring Cloud简介
Spring Cloud是一系列框架的有序集合.利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现.注册.配置中心.消息总线.负载均衡.断路器.数据监控等(这里只简单的列了 ...
- spring cloud微服务分布式云架构-整合企业架构的技术点
spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?完整项目的源码来源 技术支持一七九一七四三三八零 下面我针对于s ...
- spring cloud微服务分布式云架构 - common-service 项目构建过程
欢迎大家和我一起学习spring cloud构建微服务云架构,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大 ...
- (九)Java版Spring Cloud B2B2C o2o鸿鹄云商平台--平台管理通用设置
上一篇文章我们介绍了<鸿鹄云商b2b2c o2o平台管理功能清单>,从今天开始,我们对当前清单中的每一个功能进行剖析,会将产品设计.UI设计.功能设计详细给大家讲解,也希望能够帮助更多的朋 ...
最新文章
- Codeforces Round #383 (Div. 1) C(二分图)
- C#使用linq查询大数据集的方法
- /etc/resolv.conf文件详解
- 你在面试时是否无意中暴露了缺点?资深面试官如何从细节中看候选人的软实力...
- tomcat项目支持跨域访问
- zabbix监控之邮件报警通知
- 三段式状态机的原理/代码/仿真,1001序列检测实例Verilog
- MYSQL解决科目余额表汇总问题
- 有一个已经排好序的数组,现输入一个数,要求按原来的规律将它插入数组中。——C与C++实现
- 2022-04-19 Unity入门4——重要组件与API
- Visual C++ 2008入门经典 Ivor Horton(书_在线阅读)
- GIT创建版本库及版本的迭代
- OpenCv打开摄像头失败问题处理cap_msmf.cpp (677) MFVideoFormat_RGB24(codec not found)
- C r e a t e P r o c e s s的b I n h e r i t H a n d l e s参数
- Web3能否撕裂国内 VC 的共识?
- 毕业设计 stm32便携用电功率统计系统 -物联网 嵌入式 单片机
- Maven项目导入依赖不可用的问题,不下载的问题(众多问题中的一种)
- MATLAB的Simulink使用及实例
- 关于我对体测成绩进行分析这件事
- 走进神秘的Google X实验室
热门文章
- Hive SQL 语法大全 整理(建议收藏)
- could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running
- wordpress如何解决301重定向问题
- Pycharm创建SQLite数据库
- HDU2255 奔小康赚大钱
- Sui Builder House首尔站倒计时!
- 缩小apk体积,如何降低7M包体积
- 神州信息助力重庆银行数据资产服务与管理平台建设
- WebGIS开发基础(Web技术和地理信息系统(GIS))
- 创新数据基础设施高峰论坛,构建安全高效的城市智慧底座 ​