技术标签: java 项目管理 spring cloud java程序 分布式架构 intellij-idea 分布式
Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微服务:就是把一个单体项目,拆分为多个微服务,每个微服务可以独立技术选型,独立开发,独立部署,独立运维.并且多个服务相互协调,相互配合,最终完成用户的价值. Spring Cloud是一系列框架的有序集合。其主要的设施有,服务发现与注册,配置中心,消息总线,负载均衡,断路器,数据监控等,通过Spring Boot的方式,可以实现一键启动,和部署。
Spring 没有重新造车轮,只是把各家的应用给综合起来。最后给开发者遗留下了一个足够简单的,相当容易部署的,相当容易学习的Spring 体系。至于为什么要学习Spring Cloud的体系,因为原先的体系过于复杂了,导致开发的环境艰难,正是由于开发的环境的艰难,Spring Cloud 的是Spring体系的简化版,简化了原有的复杂。
博主使用的是IntelliJ IDEA 2021.1.2 版本进行环境搭建演示,如果使用Eclipse等IDE进行开发可以查看论坛内其他博主的博客进行学习。
点击file - new - project按钮创建一个新的项目
设置GroupId和项目名称和项目路径
本步骤中的项目路径需要自己手动设置,以免找不到项目存放位置的尴尬情况
点击Finish按钮结束项目的创建,成功创建项目如下图:
这时我们进入IDEA以后会发现我们项目只有Springcloud_Demo一个父项目,下面我问会创建Eureka,Zuul,Service等子模块对项目进行创建来实现微服务。
再进行Eureka模块搭建之前我们需要先对”Springcloud_Demo“pom文件进行相关Jar包的依赖导入
完整代码如下
<?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>
创建Eureka注册中心模块
关于Eureka
Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。Eureka提供了java客户端组件,Eureka Client,方便与服务端交互。客户端内置了基于round-robin实现的简单负载均衡。在Netifix,为Eureka提供更为复杂的负载均衡方案进行封装,以实现高可用,它包括基于流量、资源利用率以及请求返回状态的加权负载均衡。
创建Eureka模块
右键点击SpringCloud_Demo父项目后,将鼠标拖入New选项框,点击Module选项创建子模块
点击next进行下一步操作
设置Eureka子模块名称,子模块路径,点击finish完成子模块创建
修改Eureka子模块的Pom文件
当Eureka子模块创建完成的时候,这时Eureka_Demo的pom.xml是没有Jar包依赖的的,我们需要手动导入Eureka需要的Jar包依赖。
详细代码如下
<?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
代码如下:
# Tomcat
server:
port: 9099
# Spring
spring:
application:
# 应用名称
name: eureka-demo
eureka:
client:
sevice-url:
defaultZone: http://localhost:${server.port}/eureka
register-with-eureka: false
fetch-registry: false
创建Application启动类
点击IDEA右上角的Add Configurations按钮,点击左上角的加号按钮后点击Spring Boot选项进入设置页面,设置启动名称以及启动类文件收点击OK按钮完成设置。
启动Eureka
在浏览器输入访问地址: http://localhost:9099访问Eureka注册中心
关于Zuul
Zuul是Netflix开源的微服务网关,它可以和Eureka、Ribbon、hystrix等组件配合使用。Zuul的核心是一系列过滤器。这些过滤器完成以下功能:
1 身份认证和安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
2 审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
3 动态路由:动态地将请求路由到不同的后端集群。
4 压力测试:逐渐增加指向集群的流量,以了解性能。
5 负责分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求。
6 静态响应处理:在边缘位置直接建立部分响应,避免其转发到内部集群。
7 多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB(Elastic Load Blancing)使用的多样化,以及让系统的边缘更贴近系统的使用者。
创建Zuul子模块
右键点击SpringCloud_Demo父项目后,将鼠标拖入New选项框,点击Module选项创建子模块
点击Finish完成子模块创建
当Zuul子模块创建完成的时候,这时Zuul_Demo的pom.xml是没有Jar包依赖的的,我们需要手动导入Zuul需要的Jar包依赖。
详细代码:
<?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>Zuul_Demo</artifactId>
<dependencies>
<!--网关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--添加eureka客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
详细代码:
server:
port: 10010
spring:
application:
name: zuuldemo
zuul:
prefix: /api
eureka:
client:
service-url:
defaultZone: http://localhost:9099/eureka
在Zuul_Demo模块下的src/main/resources文件夹下创建application.yml核心配置文件,进行编写核心配置
在Zuul_Demo模块下的src/main/java/com/xmy路径下创建ZuulApplication.java文件
详细代码如下:
package com.xmy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulApplication {
public static void main(String[] args){
SpringApplication.run(ZuulApplication.class,args);
}
}
需要先启动Eureka注册中心后再启动Zuul网关
访问:http://localhost:9099
可以看到Zuul网关服务已经被注册到Eureka注册中心。
Service模块是客户端模块,用户编写代码和功能实现。前端请求发送到Zuul网关再有网关发送到Service服务,可以是系统的安全性提升。
右键点击Cloud_Demo父项目后,将鼠标拖入New选项框,点击Module选项创建子模块,
点击ArtifactId输入框输入Service模块名称,在此我们使用Service_Demo进行命名。
点击Finish按钮完成子模块创建。
详细代码:
<?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>ServiceDemo</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-client</artifactId>
</dependency>
<!--通用mapper起步依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<!--MySQL数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
详细代码:
server:
port: 9080
spring:
application:
name: demoservice
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/cloud_project?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 1022
eureka:
client:
service-url:
defaultZone: http://localhost:9099/eureka
在Service_Demo模块下的src/main/resources文件夹下创建application.yml核心配置文件,进行编写核心配置
在Service_Demo模块下的src/main/java/com/xmy路径下创建ServiceApplication.java文件
详细代码:
package com.xmy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ServiceApplication {
public static void main(String[] args){
SpringApplication.run(ServiceApplication.class,args);
}
}
设置启动名称和启动路径后点击OK按钮
需要先启动Eureka注册中心和Zuul网关服务后启动ServiceApplication
访问:http://localhost:9099
可以看到Zuul网关和Service服务都被注册到Eureka注册中心。到此我们的已经完成环境搭建。之后需要自行在Service服务中编写代码来实现功能,想创建多个service都可以,另外每个服务也可以链接不同的数据库;到此一个简单的Spring Cloud的环境搭建已经完成。
文章浏览阅读222次,点赞2次,收藏3次。本网上书店是针对目前网上书店的实际需求,从实际工作出发,对过去的网上书店存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,借助php编程语言、php技术、mysql数据库和apache服务器来完成系统的所有功能 。本网上书店主要包括系统用户管理模块、新闻文章管理模块、图书信息管理、商城订单管理、登录模块、和退出模块等多个模块。它帮助网上书店实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了网上书店数据资源,有效的减少了网上书店_书店项目商城代码
文章浏览阅读2.6k次,点赞4次,收藏19次。参考文件:Documentation/devicetree/bindings/media/video/msm-cam-cci.txtqcom,cam-sensor@0 { /*摄像头唯一区分标志,添加新的camera,该ID顺次加1,通过该ID会与camera_config.xml里的ID匹配,这样才会去加载该ID对应模组的驱动。*/ cell-index = <0>; /*匹配节点,驱动和设备的compatible属性相同时,才会调用probe函数。*/ _csiphy-sd-index
文章浏览阅读3.6k次。以前我们总说,JS是单线程没有多线程,当JS在页面中运行长耗时同步任务的时候就会导致页面假死影响用户体验,从而需要设置把任务放在任务队列中;执行任务队列中的任务也并非多线程进行的,然而现在HTML5提供了我们前端开发这样的能力 - Web Workers API,我们一起来看一看 Web Worker 是什么,怎么去使用它,在实际生产中如何去用它来进行产出。1. 概述Web Worker..._webworker使用场景
文章浏览阅读1.4w次,点赞4次,收藏12次。错误提示:ERROR: [1] bootstrap checks failed [1]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]错误原因:启动检查未通过 elasticsea..._max number of threads [1024] for user [work] is too low, increase to at leas
文章浏览阅读201次。李嘉诚又有新动作了!7月23日晚,李嘉诚家族名下的长实集团发布公告称,以总价约71.02亿元(约10.12亿美元)价格,把旗下成都“南城都汇”项目,卖给“禹洲集团”和“成都瑞卓置业有限公司”,两家房企一人一半(各占50%股权);而李嘉诚将从中“赚”(未经审核收益)约38.11亿元。李嘉诚71亿卖掉成都“地王”7月23日晚,李嘉诚旗下公司长实集团发布了一则公告。公告称,由长实集团子公司所持有的成都南城都汇项目卖了,接盘方为一家名为RZ3262019 Limited的公司,股东分别为禹州集团控股有限公司
文章浏览阅读2.6k次,点赞4次,收藏42次。该文章讲述了多层次分析法代码讲解,以及如何应用到楼盘综合水平分析当中_pycharm ahp
文章浏览阅读337次。https://www.bilibili.com/video/BV1dW411M7xL?from=search&seid=6818366384308552946Linux特点免费,开源,高效,稳定,处理高并发非常强悍_centos7 lost+found
文章浏览阅读202次。一、默认syn配置sysctl -a | grep _synnet.ipv4.tcp_max_syn_backlog = 1024net.ipv4.tcp_syncookies = 1net.ipv4.tcp_synack_retries = 5net.ipv4.tcp_syn_retries = 5tcp_max_syn_backlog 是SYN队列的长度,加大SYN队列长度可以容纳更多等待连接..._linux内核syn-send与syn队列
文章浏览阅读2.2w次,点赞8次,收藏60次。工作中在清洗数据的时候经常遇到一些map类型的数据的清洗、提取等。这边介绍一下我在工作中遇到的问题及相关的解决方法,其实如果知道的话都是挺简单的用法的,但是对于很多不太熟悉Hive Map函数的人来说不知道用法就意味着问题无法得到及时妥善的解决。我也是在Hive聚合函数中查找了好多资料,并且不断地去试才总结出map函数一些用法的。好了废话不多说,我开始介绍吧。假设有一张表,表名为t,其中字段p..._hive的map类型取出所有key
文章浏览阅读4.6w次,点赞30次,收藏117次。一、kafka replica当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)。Replica的个数小于等于Broker的个数,也就是说,对于每个Partition而言,每个Broker上最多只会有一个Replica,因此可以使用Broker id 指定Partition的Replica。所有Partition..._1. rerplica.lag.time.max.ms
文章浏览阅读1.6k次。直接上代码吧<!DOCTYPE html><html lang="zh"><head><title>Fireworks</title></head><body> <div class="firework-container" ></div> <script src="./js/js/jquery-1.11.0.min.js"></script> <sc_fireworks.js频率高点
文章浏览阅读126次。导致报错原因是?不能实例化;去除就ok了。_09:43:03.302 [http-nio-9300-exec-3] error o.a.c.c.c.[.[.[.[dispatcherservlet