精华内容
下载资源
问答
  • 微服务 前后端分离部署环境

    千次阅读 2019-03-25 17:47:02
    微服务 前后端分离部署环境 一、环境 后端: jdk1.8 windows下直接安装jdk1.8,点击下一步即可 linux下安装jdk百度可知 前端:nginx windows下下载nginx服务压缩包即可运行 linux下安装nginx百度可知 二、...

    微服务 前后端分离部署环境

    一、环境

    后端: jdk1.8

    windows下直接安装jdk1.8,点击下一步即可

    linux下安装jdk百度可知

    前端:nginx

    windows下下载nginx服务压缩包即可运行

    linux下安装nginx百度可知

    二、打包

    后端:

    在项目的目录下可以在idea中点击package进行打包,也可以在项目文件目录下 mvn package

    如果是依赖与其他模块的项目,需要先打包其他模块到本地仓库中(mvn install),才能将项目打包成功

    <u>注意:如果项目更新了依赖模块需将本地仓库中的jar删除后重新打包</u>

    前端:

    在项目的目录下可以在idea中点击build进行打包,也可以在项目文件目录下 npm run build

    三、部署

    后端 部署后运行

    windows环境下:

    java -jar demo-0.0.1-SNAPSHOT.jar

    linux环境下(代表在后台运行):

    nohup java -jar demo-0.0.1-SNAPSHOT.jar &

    前端部署运行

    将打包后的单页面应用放入nginx里面的html文件夹下即可,启动nginx.exe

    由于代理问题

    nginx必须在配置文件中设置代理

    在nginx目录下的conf下的nginx.conf

    在server下面写:

    配置完nginx.conf需要重启

        location /api {
            add_header 'Access-Control-Allow-Origin' '*';
            proxy_pass http://localhost:8089/api;
        } 

    四、java将配置文件打包在外面方便更改

    1、先看项目结构(需要更改的文件)

    2、POM文件添加build

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix></classpathPrefix>
                            <mainClass>springboot启动类</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <!-- The configuration of the plugin -->
                <configuration>
                    <descriptors>
                            <!-- 存放配置文件的地方 -->
                        <descriptor>src/main/resources/config/package.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    ​
        </plugins>
    </build>

    3、添加package.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <assembly
            xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
        <id>package</id>
        <formats>
            <format>zip</format>
        </formats>
        <includeBaseDirectory>true</includeBaseDirectory>
        <fileSets>
            <!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
            <fileSet>
                <directory>${project.basedir}</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <!--<include>*.sql</include>-->
                    <include>*.bat</include>
                    <include>*.md</include>
                    <!--<include>README*</include>-->
                    <!--<include>LICENSE*</include>-->
                    <!--<include>NOTICE*</include>-->
                    <!--<include>build.info</include>-->
                </includes>
            </fileSet>
    ​
            <fileSet>
                <directory>${project.basedir}/src/main/resources</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <include>config/*.xml</include>
                    <include>config/*.properties</include>
                    <include>*.properties</include>
                </includes>
            </fileSet>
    ​
            <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
            <fileSet>
                <directory>${project.build.directory}</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <include>*.jar</include>
                </includes>
            </fileSet>
        </fileSets>
    </assembly>

    4、添加快速启动的windows脚本 start.bat

    java -jar -Dspring.config.location=%cd%\application.properties  %cd%\demo-0.0.1-SNAPSHOT.jar 

    5、打包后的项目目录

    五、跳过单元测试

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

    -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

    不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

    一 使用maven.test.skip,不但跳过单元测试的运行,也跳过测试代码的编译。

    mvn package -Dmaven.test.skip=true  


    也可以在pom.xml文件中修改

    
    <plugin>  
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-surefire-plugin</artifactId>  
        <version>2.5</version>  
        <configuration>  
            <skip>true</skip>  
        </configuration>  
    </plugin> 



    二 使用 mvn package -DskipTests 跳过单元测试,但是会继续编译;如果没时间修改单元测试的bug,或者单元测试编译错误。使用上面的,不要用这个

    <plugin>  
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-surefire-plugin</artifactId>  
        <version>2.5</version>  
        <configuration>  
            <skipTests>true</skipTests>  
        </configuration>  
    </plugin> 
    


    跳过文档

    -Dmaven.javadoc.skip=true



     

     

    docker打包

    docker build -t test .

    dokcer运行

    docker run -p 8761:8080 test

    docker run -d -p 8761:8080 test

    -d是后台运行

    Docker常用命令

    docker images 查看仓库所有的镜像

    docker ps 查看执行的容器

    docker ps -a 查看所有容器

    docker stop id id是该容器的IMAGE ID 停止容器运行

    docker rm id id是该容器的IMAGE ID 删除容器

    docker rmi id id是该仓库的id 删除仓库镜像

    展开全文
  • 采用最新前后端完全分离框架(Spring Cloud+Spring Boot+Vue2+Element ui) 前端封装微信专用vue组件,开发中实现灵活调用,杜绝重复造轮子,让前端开发更容易 微信接口采用WxJava(微信开发 Java SDK),开发中无需...
  • 作为前后端分离项目后端spring cloud系列开发脚手架API for Project Base,包含注册中心、服务者、消费者、网关gateway,集成了swagger增强版knife4j在线文档,mybatis plus自动生成代码等等,可直接作为项目开发...

    acelee-apb

    源码地址:
    https://gitee.com/acelee723/acelee-apb

    介绍

    作为前后端分离项目后端spring cloud系列开发脚手架API for Project Base,包含注册中心、服务者、消费者、网关gateway,集成了swagger增强版knife4j在线文档,mybatis plus自动生成代码等等,可直接作为项目开发基础进行后端代码开发。

    软件架构

    • Spring Boot (2.3.2.RELEASE)
    • Spring Cloud (Hoxton.SR6)
    • Spring Cloud Eureka
    • Spring Cloud Fegin
    • Spring Cloud Gateway
    • Mybatis-Plus (3.3.2) 文档
    • knife4j (2.0.4) 文档

    工程说明

    • acelee-apb

      • apb-bizcommon 提供者公用jar包
      • apb-bizsercer 提供者
      • apb-common 公用jar包
      • apb-gateserver 网关
      • apb-regserver 注册中心
      • apb-webcommon 消费者公用jar包
      • apb-webserver 消费者
      • docs 文档

      备注:

      • 提供者服务有新增的服务添加在apb-bizserver下面;
      • 消费者服务有新增的服务添加在apb-webserver下面;
      • 启动顺序:apb-regserver、apb-bizsercer下所有提供者、apb-webserver下所有消费者、apb-gateserver
      • 访问:http://localhost:9000/doc.html 查看api各个服务的接口文档

    代码生成

    • 生成类:apb-bizcommon --> src/main/java/com/aceleeyy/apb/generator/AutoCreateBean.java
    • 生成操作:
      • 1)修改MySQL数据库地址,main()方法里的表名;
      • 2)右击执行main(),无报错日志即生成完毕;
    • 生成位置:
      • 1)apb-bizcommon --> model、mapper、service、serviceImpl
      • 2)apb-webcommon --> model
    • 完成一个表的增删查改:
      • 1)apb-bizsercer 新建一个controller继承BaseController,提供者即完成;
      •  @RestController
         @RequestMapping("/users")
         public class UserController extends BaseController<TUser> {
         
         }
        
      • 2)apb-webserver 新建一个service继承BaseService,提供者服务即完成;
      •  @FeignClient("basic-biz")
         public interface UserService extends BaseService<TUser> {
         
             String BASE_URI = "/users"; 
         }
        
        新建一个controller继承BaseController,消费者即完成;
      •  @Api(tags = "用户管理")
         @RestController
         @RequestMapping("/users")
         public class UserController extends BaseController<TUser> {
         
             @Autowired
             private UserService service;
         
             @Override
             protected String uri() {
                 return service.BASE_URI;
             }
         }
        
      • 3)启动之后,在文档上可看到增删查改以及列表接口;
      • 在这里插入图片描述
    展开全文
  • 基于REST风格的前后端分离的Web服务架构的.NET Framework实现第3讲《前端实现篇》 https://blog.csdn.net/leochen0207/article/details/89496203 由于新建的项目里面包含静态内容的wwwroot文件夹,这点和Spring ...

    这里需要说明一下,前端实现部分,请参考我的另外一篇文章。

    基于REST风格的前后端分离的Web服务架构的.NET Framework实现第3讲《前端实现篇》

    https://blog.csdn.net/leochen0207/article/details/89496203

    由于新建的项目里面包含静态内容的wwwroot文件夹,这点和Spring Boot的微服务实现方式几乎一致,所以我只是把几个用来做测试的前端静态内容文件复制到这个文件夹里面。

    接下来,实现后端的CRUD,也就是增删查改功能。我这里还是以用户信息为例。

    第一,在数据库中新建User用户表

    下图所示的是建表语句

    第二,实现Models数据访问层

    新建User类,直接上代码。

    这里需要注意,[Table("User")]是注解,这和Java基本类似,代表的是数据库的表名,这个需要先在数据库中建表,也就是说,需要先有数据库的表。[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]也是注解,代表的是id是主键,并且是通过自增长方式来实现的。

    然后新建数据访问上下文YpobDBContent对象。

    最后,还需要配置两个地方,第一个是appsettings.json,如下图所示。

    这里主要是加入了SqlServerConnection数据库连接字符串。第二个是Startup.cs,如下图所示。

    第三,实现Repositories业务逻辑层

    新建UserRepository类,直接上代码。

    这里需要注意,数据访问层在这里是通过构造函数的方式注入进来的。这里我查阅了很多资料,才把业务逻辑层和数据访问层分开了,也算是对架构的一个贡献吧。

    具体代码就不展开了,需要看源代码的,可以到GitHub上下载来对照着看。

    第四,实现UserController

    右键Controllers文件夹->添加->控制器,选择箭头所指的部分,添加。

    输入UserController,添加。

    源代码如下图所示。

    这里需要注意,数据访问层同样是通过Controller的构造函数注入给业务逻辑层的,这是微软官方文档中的主要实现方式。然后路由这里我改动了一下,就是还需要在路由中加入action。这样做的好处是,可以指定具体的action来提供给前端使用。这也是我在正式项目中主要使用的方式。

    另外,如果不想访问默认路由的话,那还需要对launchSettings.json进行修改,如下图所示。

    最后,要想实现前端静态内容的访问的话,还需要修改Startup.cs,如下图所示。

    到此为止,后端的核心代码就算是实现完成了。下图是项目的结构。

    下一篇文章,我会具体测试一下程序是否正常,是否符合要求,这也算是符合测试驱动开发TDD的思想吧。

    展开全文
  • 这就是面向微服务的模块化开发模式,微服务模块之间的耦合性低,内部的内聚性高。其余的所有实际中的业务操作,都可以按照前面实现出来的功能,进行扩展。 要实现分布式的微服务架构,需要解决前端用户的认证授权...

    前面我已经完成了一个完整的CRUD操作,并且通过了测试。这就是面向微服务的模块化开发模式,微服务模块之间的耦合性低,内部的内聚性高。其余的所有实际中的业务操作,都可以按照前面实现出来的功能,进行扩展。

    要实现分布式的微服务架构,需要解决前端用户的认证授权问题。这里的前端用户,不一定是人,也可能是机器或者其他东西。分布式的微服务架构不适宜用session的解决方案来实现认证授权,注意这里我说的是不适宜,而不是不适用。所以我打算使用过滤器来横向切入,通过JWT的解决方案来实现我这个项目的认证授权需求。这也算是借用了Java里面的AOP的编程思想吧,出于实战的目的,这里我就不过多的解释技术细节了,不清楚的技术细节,就自行百度吧。

    其实,如果是需要实现单点登录的话,也可以把认证授权这部分,独立出一个项目来做,单独部署。这样前端就可以先通过认证授权服务器来进行认证授权操作,通过之后,再分发到后端的微服务集群,进行业务操作。出于项目演示的简单性原则,这里我就把认证授权模块集成到一个项目中来实现了。

    1、JwtUtil的实现

    首先,需要安装JWT的程序包,这里就请自行安装吧,安装完成后的截图如下所示。

    其次,在Utils文件夹中新建JwtUtil.cs类文件,代码如下图所示。

    我就不展开源代码了,需要源代码的,请自行到github上下载。

    这里需要解释一下,常量字符串secret是生成Token的密钥。我这里是把传入的id,认证授权的失效时间,通过secret进行加密。然后返回加密的Token字符串给前端,前端保存这个Token,以后需要业务操作的话,前端传递Token给后端,后端经过验证,决定是否放行该业务操作。这就是Token方式的大致描述,要想了解详细细节的话,还请自己查找JWT的资料查看。

    2、过滤器的实现

    首先,在Filters文件夹中建立AuthFilter.cs的过滤器类文件,代码如下图所示。

    这里,我只是简单的实现了一个静态的验证方法,没有使用JWT的方式。然后,我在OnAuthorization方法中通过if语句,实现了一个简单的业务逻辑。简单来说,就是,只要在controller中的action上添加了[AllowAnonymous]这个注解,那过滤器就放行该操作,而不做下面的认证授权操作。代码如下图所示。

    这样做的好处是,不需要认证授权的操作,比如说登录,则可以直接放行。

    其次,在Startup.cs中,加入AuthFilter过滤器,代码如下图所示。

    3、测试

    对认证授权模块进行测试,需要在controller和repository中,实现一个getToken()方法,用来在前端获取Token进行测试。

    我这个项目的认证授权的大致流程是这样的:前端登录系统、获取Token、返回前端保存Token、访问带有[AllowAnonymous]这个注解的服务接口(直接放行)、访问不带[AllowAnonymous]这个注解的服务接口(验证Token)。

    这个getToken()方法,我就不传入用户名和密码参数进行验证了,这里我直接返回生成的Token,代码如下图所示。

    注意这个getToken()服务接口,添加了[AllowAnonymous]这个注解。

    接下来是在过滤器中修改Token验证的业务逻辑。

    我这里用字符串1来表示验证通过,非1表示验证不通过。接下来是测试,先启动项目,首先是先获取Token,如下图所示。

    接下来通过访问getUsers服务接口来测试认证授权是否正常运行,第一步是不带Token的访问。

    可以看到,不带Token的访问,返回值是401,说明没有认证和授权,被阻止了,过滤器运行测试通过。

    第二步是带有Token的访问。

    可以看到,通过在Headers中加入Authorization的Token值,访问通过,可以正常获取到数据,说明通过认证授权,测试通过。

    到此为止,认证授权模块的实现,就算是完成了,并且通过了测试。我这个项目架构的实现,也算是初步实现了,并且可以正常使用。在分布式的微服务构架模式中,通过Token的方式来实现认证授权,是现在的主流模式。并且这种方式,也不会受制于前端的技术,这就充分降低了前后端之间和认证授权模块的耦合度。这种方式实现的认证授权模块,完全可以独立成一个项目,单独部署,用来实现分布式微服务架构的单点登录。这样在性能方面,能够得到一个更大的提升。

    展开全文
  • 既然.NET的微服务的实现方式改变了,出于对新技术的无比向往,以及一颗执着追求新技术的热心,那我就应该用新的技术来实现这个微服务架构。在实现的过程中,查阅了很多资料,有官方的,也有百度的,总的来说,一切都...
  • Spring Cloud微服务化开发,采用Nacos注册和配置中心,具有统一授权、认证后台管理系统, 其中包含具备用户管理、资源权限管理、数据导出、打印、Swagger API 管理等多个模块,支持多业务系统并行开发,可以作为后端...
  • 是一款基于SpringCloud、MybatisPlus、Shiro、Vue、ElementUI等技术栈研发的前后端分离开发框架,设计之初就定位为一款高端产品,采用全新的架构设计,后端服务和前端都是采用全新的设计方案,兼容手机、PAD和PC电脑...
  • 微服务与DevOps

    千次阅读 2017-11-15 14:57:07
    介绍微服务与DevOps。
  • 《 微服务与微服务架构 》   前言 再来谈谈微服务,关于“ 微服务架构 ” 早在2014 年一位名为 马丁.福勒 的工程师提出到现在(最早是在1967年,梅尔文.康威的康威定律中提及),经过了几年的沉淀企业实战...
  • 本框架为 :springcloud + Springboot 微服务\分布式 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架 :springcloud Greenwich.SR1 + springboot 2.1.4 + activiti6.0.0 + mybaits + maven + json ...
  • 微服务与API

    2021-04-15 18:11:08
    微服务(也称为微服务体系结构)是一种架构样式,将应用程序构造为一组松散耦合的服务,每种服务均实现业务功能。微服务架构可实现大型复杂应用程序的持续交付和部署。它还使组织能够随着时间的推移改进技术堆栈,...
  • 引言:我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了。由于我们的微服务代码是基于SpringBoot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志。
  • 这里写自定义目录标题代码阅读顺序1. 代码结构层次1. 识别对应的架构模式2. 从MVC和MVVM的区别说起3. 看下对应的依赖包构建工具maven_Pom.xml4. 项目的相关配置文件包括配置类5. 根据不同的架构模式可以从顶层代码看...
  • 微服务架构模式具有服务间独立,可独立开发部署等特点,独立开发诱发了技术上的分离,HTTP通信增加了问题诊断的复杂度,对系统的功能、性能和安全方面的质量保障带来了很大的挑战。 “ 微服务架构对测试的挑战 ...
  • 请教一下各位大佬,微服务下的读写分离有什么好的方式吗? 比较常见的方案是程序中配置多数据源,使用中间件或代码逻辑切换数据源。 有没有见过这种设计:没有配置多数据源,而是从服务层面就...
  • 微服务

    2017-10-26 20:09:14
    在过去几年中,“微服务架构”这一术语如雨后春笋般涌现出来,它描述了一种将软件应用程序设计为一组可独立部署的服务的特定方式。虽然这种架构风格没有明确的定义,但在组织、业务能力上有一些共同的特征:自动化...
  • 我们先从 Nginx 说起,了解为什么需要微服务。最初的服务化解决方案是给相同服务提供一个统一的域名,然后服务调用者向这个域发送 HTTP 请求,由 Nginx 负责请求的分发和跳转。 这种架构存在很多问题:Nginx 作为...
  • 从单体应用到微服务,我们实现了业务的快速交付。微服务在帮助我们架构解耦的同时,也带来了很多新的挑战,比如运维成本的增加和部署自动化等挑战。即使使用云平台动态管理基础设施,我们仍然要面临如下现实问题: ...
  • 微服务被称为“无共享”架构,实际上,我更倾向于把它看作是一种“尽可能少共享”的架构,因为微服务之间不可避免的总会存在某种程度的代码共享。例如,与其使用一个负责身份验证和授权的安全服务,你可能会更倾向于...
  • 在线考试系统(微服务,前后端分离)

    千次阅读 2020-07-19 13:28:46
    用户每一个答题都会生成一条记录,订阅试卷表示一对多的关系 日志记录表 用于记录用户,管理员的一些试卷操作。(比如:答题,取消试卷订阅,重置试卷等) API Api以及具体的实现代码太多了,就不多说了 消息服务...
  • [转]微服务与Docker

    千次阅读 2017-07-13 12:19:43
    微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序...
  • 从前后端分离开启微服务改造 现在我们对微服务有了更深入的了解,也准备在构建新系统时采用这套新架构了,但它还是有些复杂度的,包括服务注册中心、统一配置中心、微服务网关、接入层网关、服务治理中心、调用链路...
  • 微服务架构模式具有服务间独立,可独立开发部署等特点,独立开发诱发了技术上的分离,HTTP通信增加了问题诊断的复杂度,对系统的功能、性能和安全方面的质量保障带来了很大的挑战。 微服务架构对测试的挑战 微服务...
  • 不才写了本使用Spring Cloud玩转微服务架构的书,书名是《Spring CloudDocker微服务架构实战》 - 周立,已于2017-01-12交稿。不少朋友想先看看源码,现将代码放出。 本次放出的代码: 共计70+个DEMO覆盖...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,221
精华内容 12,488
关键字:

微服务与代码分离