慕课网-SpringCloud笔记——廖师兄【没学完】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wokenshin/article/details/84747692

题外话:突然间发现用这个记事本的习惯蛮好的,开发的时候有时候解决了问题就继续coding了,用记事本可以很方便的记录下问题,等到了某个节点之后可以把记事本里的问题进行整理,甚至都不用整理直接发到自己的博客就好了。以后遇到类似的问题可以查阅,别人也能搜索到进行解决。也许自己要提取一些关键词

内容标签:【根据标签内容就大致知道本问涉及的技术范围了】
【下面内容设置锚点】
1.Eureka Server 端的配置
2.Eureka的高可用【使用多个Eureka】
3.Eureka总结
4.商品服务编码
5.拆分服务 eureka[注册中心]、product[商品服务]、order[订单服务]
6.order【订单服务】中使用到了 Feign 来实现 http接口的请求,【也可以使用 RestTemplate 】

*需要具备的基础知识[2018.8.15]
1.SpringBoot [廖师兄相关的课程 包括前一个系列的 微信订餐系统]已学
2.Linux [去慕课网学习]
3.Docker [去慕课网学习]

1.注册中心「需要注意程序入口处的接口,还有 yml配置文件」

注册中心项目打包、运行、 【为什么要打包呢?实际项目发布的时候就是这样,而且开发的时候这里打包也方便运行,不过其实idea中是可以同时包含多个项目的】
主要是为了记录学习过程,有些地方需要优化的在实际开发中在做处理。

1.1通过 mvn命令实现打包[也可以在idea中点击图形界面打包]
1.2通过 java -jar 命令在终端运行 注册中心打包后生成的jar文件 就可以把服务跑起来
1.2.1但是按 control + C 程序就退出了,可以通过命令行实现 让起在后台继续运行,这样 control + C 程序就不会退出
1.2.2可以通过 进程id 杀死进程退出程序

具体操作如下:
1项目打包
1.1先进入到 项目根目录下

1.2通过mvn命令进行打包,如果没有安装mvn的话,可以通过homebrew来安装,如果没有安装homebrew的话,可以先安装homebrew,或者直接通过idea进行打包
打包后会在target文件夹下生成对应的.jar文件
命令行方式如下

最终可以在文件中找到生成好的jar文件

1.3然后通过java命令运行jar文件

启动成功之后就可以访问了,之后可以关闭终端or control+c退出程序

我们也可以启动 让程序一直在后台运行,这个时候如果control+c 程序就不会退出了,需要kill掉对应的进行才行
具体如下:

通过 nohup java -jar xxx.jar > /dev/null 2>&1 & 【回车】 之后就是将jar包运行在后台了
然后可以通过 ps -ef | grep eureka 【回车】查看jar包输出的日志
此时如果要关闭程序的话 可以通过命令杀死进程:kill -9 821 【821就是上面的进程id】
此时在此访问页面就访问不了了

2018.8.16.pm
2.客户端,项目启动不了,不知道为什么 明天排查一下。
Eureka client 无法启动 具体log如下

解决办法:在pom文件中引入web依赖后解决。教学视频里面并没有此操作。大概是版本的问题吧!
具体如下:
引入依赖后不要忘记Reimport一下pom文件

然后启动即可

然后我们在eureka网页中可以看到响应的信息 如下

2018.8.17 如果我们的Eureka崩溃了,那么下面的服务就都挂了,为了避免这种情况,我们可以开启两个注册中心,然后让它们彼此注册
两个Eureka互相注册后,Eureka1中的信息就会同步到Eureka2中,这样当其中一个挂掉的时候,另外一个还可以正常显示。
开发阶段可以用下面的方式实现启动两个Eureka
1.Edit Configureations

2.进行复制,并配置相关信息

3.然后在idea右边选择并运行即可

当我们运行了多个项目后 可以在控制台分别控制各个项目


此时,如果Eureka1崩溃了,或者我们可以手动停止运行它,然后我们会发现Eureka2依然保有Client的信息
但是由于Client注册的时候只在Eureka1注册了,所以当我们重启Client的时候[此时Eureka1已经关闭]就启动不起来了,而Eureka2页不会包含Client的信息
解决办法:我们可以让Client启动的时候往两个注册中心进行注册 如下:

如果我们的项目两个Eureka还是觉得不够保险的话,还可以继续增加


我们修改一个,就启动一个,然后就把三个Eureka都配置好,并启动了。

Eureka总结

分布式系统中为什么需要服务发现?
通过 注册中心, 我们的客户端可以动态的获取 各个服务端的ip地址等信息,方便动态调用。
服务端的数量/ip地址等页是动态变化的。如果没有注册中心,那么客户端
就需要进行手动配置。这是很麻烦的事情。当然不不仅如此,分布式系统中发现服务的功能还有其他的,这里不记录了。

使用MySQL在本地创建一个数据库 SpringCloud_Sell

通过sql语句创建2个表,并插入相关数据,这里的业务逻辑基本和前面一个相遇类似
可以全部sql语句一起执行
//需要注意下面的sql语句 字段的单引号 和 comment 的单引号是不一样的! 还有就是输入法的所有符号都得是英文的!!! 之前逗号写成中的了。。。

–类目
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-03-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
(‘123321123321098098’, ‘皮蛋粥’, 0.01, 39, ‘好吃的皮蛋粥’, ‘http://xxx.jpg’, 0, 1, ‘2017-03-28 16:40:22’, ‘2017-03-26 23:39:36’),
(‘123321123321098453’, ‘慕斯蛋糕’, 10.90, 200, ‘美味爽口’, ‘http://xxx.jpg’, 1, 1, ‘2017-03-28 16:40:22’, ‘2017-03-26 23:39:36’),
(‘123321123321098630’, ‘蜜汁鸡翅’, 0.02, 982, ‘好吃’, ‘http://xxx.jpg’, 0, 1, ‘2017-03-28 16:40:22’, ‘2017-03-26 23:39:36’);

4.商品服务编码
配置数据库相关的内容
4.1使用 jpa框架在项目中控制数据库
4.2由于我们使用的是 mysql数据库 所以也要使用对应的依赖

综上,我们需要在pom文件中倒入对应的 jap依赖和mysql依赖


4.3 在pom文件中配置对应的依赖 配置完成后记得更新pom文件
4.4在yml文件中配置数据库数据

在启动项目的时候报错:java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)
原因是我把数据库的密码写错了,在最初密码是在哪里设置的呢,如下图

我们创建数据库的时候,是有设置用户名和密码的,点击这里可以查看最初配置的数据

遗憾的是,这里的密码查看不到明文,如果实在忘记了的话,只能重新设置了。
在实际的开发中,一定要注意一些细节,比如 对应功能所使用的注解,还有一些接口类/继承类的参数不要写错了。
如下

—订单
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(11) NOT NULL COMMENT ‘数量’,
product_icon varchar(512) DEFAULT 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 (detail_id),
KEY idx_order_id (order_id),
FOREIGN KEY (order_id) REFERENCES order_master (order_id)
);

5.拆分服务
拆分服务 eureka[注册中心]、product[商品服务]、order[订单服务] 这里分别建了三个项目

Eureka注册中心 具体的作用嘛。。。还是有很多,自行百度吧,视频里面其实讲得也很清楚
Product 和 order 是将原来的项目中的整体内容进行了拆分。
product[商品服务]
order[订单服务]

分别处理个字单独的业务,如果有所交互 通过彼此对外的接口来实现

【2018.9.3】
网关的作用:负载均衡、路由寻址
Eureka中心的心跳机制回周期检查各个服务是否存活并获取相应的信息
from 向哥

猜你喜欢

转载自blog.csdn.net/wokenshin/article/details/84747692
今日推荐