admin

  • SpringCloud Alibaba微服务商城项目(四): 项目数据库初始化,人人开源搭建后台管理系统

    目录 项目数据库初始化 人人后台快速搭建 1.项目数据库初始化 a.数据库软件用的是SQLyog b.数据库sql一次建立各个微服务独立的数据库,如上图所示 2.人人后台快速搭建 人人开源的脚手架可以方便我们进行快速的后台管理开发 https://gitee.com/renrenio a. clone renren-fast和前端项目renren-fast-vue 1). 在我们的项目根目录wkkmall里面git bash然后git clone renren-fast这个项目 2).创建renren-fast的基础数据库(在项目的db文件夹里面的mysql.sql文件) 3).配置数据库的环境,测试运行后端启动 先看一下application.yml文件,我们看到我们用的是dev的环境,那么久指向application-dev.yml文件 进入application-dev.yml文件修改如下标红的数据库连接参数 修改完数据库连接数据后我们跑一下main 最终后端接口成功 4).clone前端后台管理项目renren-fast-vue,然后npm安装运行前端项目 先克隆项目到我们指定的目录 vsccode打开项目,然后npm install(nodejs请自行安装即可) 最终搭建成功的界面。可以做一下登录测试

    January 30, 2021 0 0
  • SpringCloud Alibaba微服务商城项目(三): gitee初始化项目、创建各个微服务模块

    目录 1.在gitee上初始化我们的项目 2.创建各个微服务模块 1.在gitee上初始化我们的项目 以下是初始化项目的各项参数,我们用生产者开发者模型 然后,复制我们的项目地址 2. 创建各个微服务模块 a.通过git版本控制创建新项目 b.粘贴我们第一步创建项目时候生成的项目git地址 创建成功后项目结构如下图,这个是我们的总项目,我们所有的微服务模块都会在这个项目下创建 c. 创建各个微服务模块 1).在总项目下面new一个新的module 2).用sring initializr初始化模块的基本骨架 3).修改项目的初始化信息,这些信息标红的地方按照格式搞好即可,后面再pom.xml里面会有这些信息的体现 4).创建项目我们先导入spring web 以及 openfeign两个组件,后面的我们按需导入即可 要创建的模块: 1.商品模块 2.仓储模块 3.订单模块 4.优惠券模块 5.用户模块 5).创建完以后的效果如下图所示 通过rundashbord可以看到我们每个模块的启动项 6).创建主项目文件的pom 创建主文件的pom是为了聚合我们的几大模块进行统一的管理,以下是我们的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wkkmicro.wkkmall</groupId> <artifactId>wkkmall</artifactId> <version>0.0.1-SNAPSHOT</version> <name>wkkmall</name> <description>聚合服务</description> <packaging>pom</packaging> <modules> <module>wkkmall-order</module> <module>wkkmall-member</module> <module>wkkmall-product</module> <module>wkkmall-ware</module> <module>wkkmall-coupon</module> </modules> </project> modules包好了我们所有的模块 7).将主项目的pom添加到mvn管理里面 点击mvn管理界面的+号 添加主服务的pom文件** 最后的效果如下图,出现了一个wkkmall(root)的选项 然后效果就是我们可以统一的管理这些子模块的所有项目依赖 d. 订制自己的gitignore文件规则 在git提交过程中有些文件是没必要提交到我们远程仓库中的这个时候gitignore文件的重要性就凸显出来了,所以我们必要做的就是进行gitignore文件规则的自定义 在version control选项里面有unversioned control这个选项,这个选项下面的文件就是没有进行版本控制的文件,当然我们可以右键进行commit进行提交,但是这个操作必须建立在我们对垃圾文件进行规避后再进行 以下是忽略文件的示意图 首先是根目录的.idea文件夹,这个文件夹我们没有必要提交到git而且如果别人拉取的时候有这个文件夹,且用的编辑器一样是idea会造成他们初始化项目出现问题 然后比如我们规避的/target文件夹这个文件夹是项目编译后的文件夹,我们没有必要把项目编译后的文件夹放到我们的git仓库 总结,我们只需要把我们src文件夹和pom.xml文件放进去即可 当上面做好后我们就可以提交unversioned files了 右键点击Unversioned Files=》Add to VCS e.提交码云 1).先安装gitee插件 2).右键commit 填写commit message然后选择commit and push(提交并且推送) 3).push到master分支 最终效果如下 以上就是整个项目微服务目录结构的搭建过程,包含了git版本控制的相关知识

    January 30, 2021 0 0
  • SpringCloud Alibaba微服务商城项目(二): vscode配置、git安装配置ssh打通码云

    1.vscode安装与配置 2.git客户端安装打通码云 1.vscode安装与配置 我们需要安装的vscode扩展 Auto close tag Auto rename tag 简体中文包(需要重启) eslint Html css support HTML Snippets Javascript (ES6)code Snippets Live Server Open in Browser Vetur 2.git客户端安装打通码云 a).https://git-scm.com/ 下载ssh客户端 b).右键进去git bash 配置基本信息 1).配置作者信息 git config –global user.name "username" 2).配置邮箱 git config –global user.email "814489173@qq.com" c).配置ssh免密登录 依然是在git bash界面,输入命令 ssh-keygen -t rsa -C "814489173@qq.com". 连续三次回车即可 然后 cat ~/.ssh/id_rsa.pub 复制这一段秘钥到码云后台的这个地方 最后用下面命令做一下测试: ssh -T git@gitee.com

    January 30, 2021 0 0
  • SpringCloud Alibaba微服务商城项目(一):项目架构分析以及环境搭建

    项目架构分析 基础环境搭建(虚拟机,docker) 1.项目架构分析 a. 项目架构图 分为内网部署和外网部署两个部分 客户端请求=》nginx集群=》内网网关=》blablabla 网关请求业务集群可以用ribbon进行负载均衡,服务之间相互调用使用的feign进行rpc调用,网关还具有限流和动态路由功能等等 业务集群的安全用OAuth2.0以及spring security进行 缓存用redis 搜索检索用elasticsearch 消息队列服务与服务的异步解耦以及分布式事务用rabbitmq elk做日志集成 注册中心我们使用spring cloud alibaba nacos 配置中心我们用spring cloud alibaba nacos(多服务动态改配置) 链路追踪我们用sleuth+zipkin CI/CD持续化集成 b.微服务划分图 我们的业务服务之外还有第三方的服务调用,这时候就需要去调用第三方的接口 为了系统健壮我们用下面的一系列springcloud组件 1.基础环境搭建(docker centos搭建) 虚拟机我们用的是vmare+centos7.6 docker的搭建和使用是重点 a.docker环境安装 先删除旧版本的 $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 然后参考这两个网址 https://www.runoob.com/docker/centos-docker-install.html https://docs.docker.com/engine/install/centos/ 安装完成后记得设置开机自启动 $ sudo systemctl start docker b.配置docker阿里云镜像加速 访问https://cr.console.aliyun.com/cn-hangzhou/mirrors 配置完成后我们以后所有的 https://hub.docker.com/ 在dockerhub搜索的镜像都会经过阿里云的加速 c.docker安装mysql 1).下载docker mysql镜像 docker pull mysql:5.7 2). 创建实例并且启动 docker run -p 3307:3306 –name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7…

    January 30, 2021 0 0
  • shopify模板开发从入门到放弃(1): 注册开发者店铺、开发者工具适配

    这个课程是为有对外贸电商领域有兴趣的小伙伴们准备的,主要就是告诉大家怎样通过shopify的liquid语法构建出属于自己的shopify商城模板,当然小伙伴们在学习完以后也可以对一些模板进行自定义的二次开发喽! 主要大纲 shopify开发者店铺注册 开发者工具适配(phpstorm) 1. shopify开发者店铺注册 进入shop partner 注册开发者店铺 在这之前需要小伙伴先注册shopify合作伙伴 访问 https://partners.shopify.com/signup 进行注册即可 中间可能有邮箱认证的步骤 a. 选择development store开发者店铺 b. 选择test an app or theme c. 进入后台,注意我们的后台地址名字 https://williamstart.myshopify.com/admin 到此我们的开发者店铺就全部搞定了 2. 开发者工具适配(phpstorm) 因为笔者最常用的是phpstorm这款开发者工具所以这里就采用了phpstorm作为我们shopify模板的开发工具 a. 先安装twig插件(liquid的语法与twig是一致的) b. 然后发开Editor->filetype 找到twig项目然后在下面的文件后缀栏目加上liquid文件后缀,这样既可以识别shopify的liquid文件内容了 下面是识别后的示例: 最后建议大家也可以用vscode 但是要安装下面的插件

    December 29, 2020 0 0
  • 1. ngnix lua开发专版:ngx_lua运行机制的分析(lua是如何嵌入到nginx请求处理流程里面的)

    主要分析流程 ngnix特点 ngx_lua的特点分析 nginx的http请求流程分析 基于nginx流程的ngx_lua生命周期分析 1. nginx特点 nginx是模块化的结构,每个模块之间并没有强耦合,这也方便了开发者对其进行定制化开发,但是如果我们用c和c++去开发nginx内嵌的程序,我们需要符合 Nginx 的开发规则和数据结构使用,而且需要我们熟悉Nginx源码,再加上调试的复杂度,会极大影响我们的开发周期与效率 1. ngx_lua的特点分析 ngx_lua属于openresty的内部模块,通过这个模块将lua内嵌如nginx的结构中。Lua内建协程,通过协程的挂起与唤醒可以很好的通过回调函数的形式把异步的调用同步化,我们都知道nginx的高性能取决于全异步的调用方式,lua就可以通过协程的方式调用异步的api从而使使用者可以用同步编程的方式编写高性能的异步程序,而且并不影响nginx本身的性能。 ngx_lua把耗时且阻塞的I/O操作都委托给 Nginx 事件模型,从而实现完全的非阻塞调用 协程在挂起时自动保存上下文,工作进程上的 VM 可以处理下一个协程的任务层事件模型完成任务时,根据回调,对应的例程会被恢复上下文,从而继续执行用户操作,这个过程不需要对数据进行同步和匹配,用起来与同步操作无异。 nginx工作模式是管理进程(master process) + 工作进程(worker processes)的模式,我们可以称之为看门狗模式 下面是nginx的看门狗工作模式 对于ngx_lua,我们可以理解为在以上这种基础模式的情况下,加入了lua解释器和lua虚拟机,相当于每个工作进程都有自己独立的lua解释器和虚拟机实例,而且单独工作进程所处理的请求都会共享这个实例。ngx_lua处理请求的方式是“一个请求对应一个协程”,当请求被建立的时候,对应的协程也会被创建出来,当请求完成的时候,这个对应的协程也会被销毁。同时每个协程都有自己的独立全局变量空间,所以请求跟请求之间的协程不会有相互影响,而且代码也会被放入到sandbox沙箱里面,请求创建的时候协程全局变量以及代码sandbox所对应的内存空间都会被创建,请求结束的时候这些内存空间会相应被销毁。 这时候有人可能会担心请求量大,协程数量也随之增大,起对应的内存空间也会增大,那么会不会影响整体系统的性能呢? duck不必担心这个问题,协程是轻量级线程,而且ngx_lua本身给每个协程分配的内存空间在2kb左右,对于系统性能消耗大家不必太担心的。 下面是ngx_lua与nginx本身配合的整体生命周期 整体流程: a. worker process初始化ngnix各个模块 b. event模块检查到有用户请求,然后创建连接 c. 根据nginx配置和请求细节调用对应的handler(假设有ngx_lua的配置),然后调用对应的ngx_lua d. ngx_lua模块调用lua VM,运行对应的代码 e. lua VM 调用lua代码 f. VM 返回结果给ngx_lua g. ngx_lua给http模块返回响应数据 h. http接收到数据后向event模块发出响应 i. event模块向工作进程交出控制权 ngx_lua整体机制: a. 每个工作进程创建对应的lua虚拟机 b. ngnix i/o操作封装为lua使用的api载入虚拟机给我们写的lua代码使用 c. 每个请求都会拉起一个对应的协程进行处理,且协程与协程之间数据是不会相互污染的 d. Lua代码调用i/o等异步接口时,当前协程会被挂起,上下文数据自动保存,不会阻塞工作进程 e. i/O 等异步操作完成时还原线程上下文,继续代码执行 3.nginx的http请求阶段分析 首先看一个结构体: typedefenum{ NGX_HTTP_POST_READ_PHASE = 0, // 接收到完整的HTTP头部后处理的阶段 NGX_HTTP_SERVER_REWRITE_PHASE, // URI与location匹配前,修改URI的阶段,用于重定向 NGX_HTTP_FIND_CONFIG_PHASE, // 根据URI寻找匹配的location块配置项 NGX_HTTP_REWRITE_PHASE, // 上一阶段找到location块后再修改URI NGX_HTTP_POST_REWRITE_PHASE, // 防止重写URL后导致的死循环 NGX_HTTP_PREACCESS_PHASE, // 下一阶段之前的准备 NGX_HTTP_ACCESS_PHASE,…

    December 29, 2020 0 0
  • openresty+lua高并发:(1) win环境下idea配置lua开发环境

    1 准备软件 lua for windows v5.1.4 idea2019版本的 idea配置lua的开发环境 一. 下载lua for win 下载地址,然后一路安装 https://www.anxz.com/down/19788.html 二. idea2019版本自行安装 三. 配置lua的开发环境 1. 安装emmylua 2. 配置sdk 【File】->【Project Structure】 配置lua.exe的运行sdk 3.写一个测试代码 4.运行时候报错 这个时候我们需要调整run configuration 必须要知道的就是我们的执行文件路径必须要清楚,working dir 工作文件路径也要清楚设置才可以成功执行 以下是执行结果:

    December 8, 2020 0 0
  • 6. hytrix熔断器容错机制的初步理解

    首先我们要清楚hytrix已经和feign融合到一起了,就看我们到底用不用了 搭建过程 consumer消费者端配置hytrix的开启 代码实现 1. consumer消费者端配置hytrix的开启 eureka: client: service-url: defaultZone: http://wkk:123456@127.0.0.1:7776/eureka registry-fetch-interval-seconds: 5 server: port: 9002 spring: application: name: wkk-user-consumer feign: # 开启hytrix的配置项 hystrix: enabled: true 2. 代码实现 UserFeignClient接口类的类注解里面加入了UserFeignClientFallback.class这个回调类,这个类就是熔断器的实现类 @FeignClient(name = "wkk-user-provider",fallback = UserFeignClientFallback.class) public interface UserFeignClient { @RequestMapping(value = "/login", method = RequestMethod.POST) boolean login(User user); @RequestMapping(value = "/login", method = RequestMethod.GET) String login(@RequestParam("count") int count); } 然后是UserFeignClientFallback这个回调类的实现,注意它是UserFeignClient这个接口类的实现 /** * 备胎模块 */ @Component public class UserFeignClientFallback implements UserFeignClient { @Override public boolean login(User user) { return false; } @Override public String login(int i) { return "异常"; } } 我们要注意的是,当我们的服务提供者挂掉的时候,这个回调的熔断器就会起作用,熔断器实现但是feign接口类里面的方法,这个方法的具体规则与我们定义的真正的服务提供者的方法是必须一致的,这就是我们所说的微服务调用的三板斧

    November 10, 2020 0 0
  • 5. 服务提供与服务消费者如何用javabean进行传参(公共依赖模块)

    搭建过程 创建公共项目(maven创建) 写javabean 导入lombok 安装导入公共项目到maven 调用传参 1. 创建公共项目 直接创建maven项目即可,依赖项里面加入lombok自动生成getset等 2. javabean书写 package com.springcloud.demo.model; import lombok.Data; import lombok.ToString; @Data //lombok注解 @ToString //lombok注解 public class User { private String username; private String password; } 3. 导入lombok 这个导入操作其实就是在plugins下载lombok插件即可,很简单 4. 安装公共项目到maven依赖 右侧maven项目管理里面的install,注意groupid与actifactid 请注意maven的依赖地址这个要在settings里面设置,百度很详细不一一列举了 5. 调用传参 a. 加入依赖 我们在provider里面调用这个公共库,前提是需要在pom里面加入com.springcloud的依赖,注意groupid与actifactid(与我们在公共库里面定义的是一致的) b. 方法中调用javabean c. 消费端的调用方法 feign类里面的 控制器类里面的

    November 10, 2020 0 0
  • 4. 服务消费者Consumer的开发过程(feign定义与调用)

    搭建过程 项目初始化过程 yml配置和依赖项的添加 定义FeighClient调用类 控制器LoginController调用Feign 测试 1. 项目初始化过程 与之前的服务提供者的搭建框架是一样的,我们用spring initializer 去创建一个dicovery项目即可 2. yml配置和依赖项的添加 依赖的添加(openfeign的添加)pom引入这个依赖 org.springframework.cloud spring-cloud-starter-openfeign yml配置 eureka: client: service-url: defaultZone: http://wkk:123456@127.0.0.1:7776/eureka registry-fetch-interval-seconds: 5 server: port: 9002 spring: application: name: wkk-user-consumer feign: //这个地方是熔断器的位置,先不要管他 后面会有 hystrix: enabled: true 3. 定义FeighClient调用类 a. 首先要现在启动类做注解,启用Feigh客户端 @SpringBootApplication @EnableEurekaClient @EnableFeignClients //启用Feigh全靠这个注解 public class WkkUserConsumerApplication { public static void main(String[] args) { SpringApplication.run(WkkUserConsumerApplication.class, args); } b.创建FeightClient类,如下图所示 代码如下所示: @FeignClient(name = “wkk-user-provider”,fallback = UserFeignClientFallback.class) public interface UserFeignClient { @RequestMapping(value = “/login”, method = RequestMethod.POST) boolean login(User user); @RequestMapping(value = “/login”, method = RequestMethod.GET) String login(); } 类注解里面的name相当于是我们调用的服务提供着节点的名字,我们之前创建的“wkk-user-provider”,fallback是熔断器的回调类,我们后面再说。 这里面两个login方法分别对应服务提供着里面的两种方法,一种无参数一种有参数,有参数的涉及到公共类,这个我们也放到后面再讨论 上面大家可以看到…

    November 8, 2020 0 0

Contact Us

在线咨询:点击这里给我发消息

邮件:814489173@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code