Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,那我们今天就给大家讲解一下有关springcloud项目实例。
本次实战以Springboot+maven为基础进行快速配置,采用分布式微服务架构下的一站式解决方案Spring Cloud,集成组件Eureka+Config+Zuul+Feign/Ribbon+Hystrix+RabbitMQ+Redis+Sleuth+ZipKin。
开发环境:JDK1.8+MySQL5.7 + IDEA
项目模块主要有:api-gateway(网关),client(客户端),config(配置中心),erurka(服务注册与发现中心),order(订单模块),product(商品模块),user(用户模块)
项目包结构:
搭建服务注册中心(eureka)
创建一个基础的springboot工程,命名为eureka,并在pom.xml中引入相关依赖
<dependencies > <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</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>
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行注册,通过springboot工程一键部署和启动
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
application.yml配置如下,在默认配置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们可以选择禁用它的客户端注册行为,即 eureka.client.register-with-eureka: false
eureka: client: service - url: defaultZone: http: //localhost:8761/eureka/ register - with - eureka: false server: enable - self - preservation: false spring: application: name: eureka server: port: 8761
在完成如上配置后,启动工程,访问 http://localhost:8761/ ,显示eureka注册中心面板如下
注册服务提供者(client)
完成了注册中心的搭建,尝试将一个springboot应用注册到eureka的服务治理体系中去,搭建一个springboot应用并加入如下依赖
<dependencies > <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> < dependency > <groupId>org.springframework.boot</groupId> < artifactId > spring - boot - starter - web < /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>
client端配置文件如下:
eureka: client: service - url: defaultZone: http: //localhost:8761/eureka/,http://localhost:8762/eureka/ #instance: #hostname: clientName spring: application: name: client server: port: 8081
通过@EnableEurekaClient注解启动一个eureka客户端,提供服务,进行服务注册,@EnableEurekaClient本身就是用@EnableDiscoveryClient来实现的
/**启动类 * * @author jiayuan9608@163.com * 2018-10-02 15:05 * @version 1.0.0 */ @SpringBootApplication @EnableEurekaClient public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); } }
在eureka注册中心页面刷新,此时client已经将服务注册到eureka上
统一配置中心(config)
创建一个springboot应用,pom.xml依赖以上面客户端相同,同样将自己作为一个客户端服务,也是要注册到eureka中去的,application.yml配置文件如下,将远程Git地址和账号密码配置到文件中去,用于向远程文件拉取相关配置。注意,配置中心拉取的配置会与本地已有配置进行合并,若相同则覆盖。
spring: application: name: config cloud: config: server: git: uri: https: //gitee.com/jiayuan1234/config-repo username: 2352840798 @qq.com password: ** ** ** ** ** basedir: D: \MyData\ workspace\ IDEA\ SpringCloud_Sell\ config\ basedir eureka: client: service - url: defaultZone: http: //localhost:8761/eureka/ management: endpoints: web: exposure: include: "*" server: port: 8082
远程Git配置文件
启动config项目,获取配置文件内容
数据库表结构:
--类目 create table `product_category`( `category_id` int not null auto_increment , `category_name` varchar(64) not null comment '类目名字' , `category_type` int not null comment '类目编号' , `create_time` timestamp not null default current_timestamp comment '创建时间' , `update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间' , primary key(`category_id`) , unique key `uqe_category_type`(`category_type`) ); INSERT INTO `product_category`(`category_id`, `category_name`, `category_type`, `create_time`, `update_time`) VALUES (1, '热榜', 11, '2017-03-28 16:40:22', '2017-11-26 23:39:36') , (2, '好吃的', 22, '2017-03-14 17:38:46', '2017-11-26 23:39:40'); --商品 create table `product_info`( `product_id` varchar(32) not null , `product_name` varchar(64) not null comment '商品名称' , `product_price` decimal(8, 2) not null comment '单价' , `product_stock` int not null comment '库存' , `product_description` varchar(64) comment '描述' , `product_icon` varchar(512) comment '小图' , `product_status` tinyint(3) DEFAULT '0' COMMENT '商品状态,0正常1下架' , `category_type` int not null comment '类目编号' , `create_time` timestamp not null default current_timestamp comment '创建时间' , `update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间' , primary key(`product_id`) ); INSERT INTO `product_info`(`product_id`, `product_name`, `product_price`, `product_stock`, `product_description`, `product_icon`, `product_status`, `category_type`, `create_time`, `update_time`) VALUES ('157875196366160022', '皮蛋粥', 0.01, 39, '好吃的皮蛋粥', '//fuss10.elemecdn.com/0/49/65d10ef215d3c770ebb2b5ea962a7jpeg.jpeg', 0, 1, '2017-03-28 19:39:15', '2017-07-02 11:45:44') , ('157875227953464068', '慕斯蛋糕', 10.90, 200, '美味爽口', '//fuss10.elemecdn.com/9/93/91994e8456818dfe7b0bd95f10a50jpeg.jpeg', 1, 1, '2017-03-28 19:35:54', '2017-04-21 10:05:57') , ('164103465734242707', '蜜汁鸡翅', 0.02, 982, '好吃', '//fuss10.elemecdn.com/7/4a/f307f56216b03f067155aec8b124ejpeg.jpeg', 0, 1, '2017-03-30 17:11:56', '2017-06-24 19:20:54'); --订单 create table `order_master`( `order_id` varchar(32) not null , `buyer_name` varchar(32) not null comment '买家名字' , `buyer_phone` varchar(32) not null comment '买家电话' , `buyer_address` varchar(128) not null comment '买家地址' , `buyer_openid` varchar(64) not null comment '买家微信openid' , `order_amount` decimal(8, 2) not null comment '订单总金额' , `order_status` tinyint(3) not null default '0' comment '订单状态, 默认为新下单' , `pay_status` tinyint(3) not null default '0' comment '支付状态, 默认未支付' , `create_time` timestamp not null default current_timestamp comment '创建时间' , `update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间' , primary key(`order_id`) , key `idx_buyer_openid`(`buyer_openid`) ); --订单商品 create table `order_detail`( `detail_id` varchar(32) not null , `order_id` varchar(32) not null , `product_id` varchar(32) not null , `product_name` varchar(64) not null comment '商品名称' , `product_price` decimal(8, 2) not null comment '当前价格,单位分' , `product_quantity` int not null comment '数量' , `product_icon` varchar(512) comment '小图' , `create_time` timestamp not null default current_timestamp comment '创建时间' , `update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间' , primary key(`detail_id`) , key `idx_order_id`(`order_id`) ); --用户 CREATE TABLE `user_info`( `id` varchar(32) NOT NULL , `username` varchar(32) DEFAULT '' , `password` varchar(32) DEFAULT '' , `openid` varchar(64) DEFAULT '' COMMENT '微信openid' , `role` tinyint(1) NOT NULL COMMENT '1买家2卖家' , `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' , PRIMARY KEY(`id`) );
基于Spring Cloud项目实战,干货很多。希望开发人员在平时一定要多加研究,提高自己的能力,为未来发展做基础!最后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。
推荐阅读: