精华内容
下载资源
问答
  • alibaba)框架开发教程-1主模块及支付模块搭建搭建第二个支付模块:cloud-provider-payment8002模块,端口号设置为8002 2. 修改两个支付模块的Controller PaymentController添加如下内容 @Value("${server.port}") ...

    视频链接:2020最新版SpringCloud框架开发教程-周阳
    文章源码:https://github.com/geyiwei-suzhou/cloud2020/

    支付集群
    1. 搭建cloud-provider-payment8002模块

    参考SpingCloud(H版&alibaba)框架开发教程-1主模块及支付模块搭建搭建第二个支付模块:cloud-provider-payment8002模块,端口号设置为8002

    2. 修改两个支付模块的Controller

    PaymentController添加如下内容

    @Value("${server.port}")
    private String serverPort;
    

    将PaymentController的create方法中"插入数据库成功改为"插入数据库成功, serverPort:" + serverPort
    将PaymentController的getPaymentById方法中"查询成功改为"查询成功, serverPort:" + serverPort

    3. 修改订单模块的Controller

    将OrderController的PAYMENT_URL值改为"http://CLOUD-PAYMENT-SERVICE"

    4. 修改ApplicationContextConfig

    将ApplicationContextConfig的getRestTemplate方法添加如下注解:

    @LoadBalanced // 使RestTemplate具有负载均衡能力
    

    5. 启动测试

    浏览器输入:
    http://localhost/consumer/payment/2
    多次刷新,从返回结果的message字段可以看出轮询调用连个支付模块

    展开全文
  • 微服务集群搭建swagger  1.选择一个子服务member服务,添加pom.xml依赖 <!--springboot 整合swagger--> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter <version>1.9.0....

    单SpringBoot项目配置swaggerAPI文档

    1.添加maven依赖

    <!--Swagger-UI API文档生产工具-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>

    2.添加swagger配置类

    @Configuration
    @EnableSwagger2
    public class Swagger2 {
        /**
         * 创建API应用
         * apiInfo() 增加API相关信息
         * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
         * 本例采用指定扫描的包路径来定义指定要建立API的目录。
         */
       @Bean
        public Docket createRestApi(){
            com.google.common.base.Predicate<RequestHandler> selector1 = RequestHandlerSelectors.basePackage("com.cnczsq.mall.elephant.v1.controller");
            com.google.common.base.Predicate<RequestHandler> selector2 = RequestHandlerSelectors.basePackage("com.cnczsq.mall.elephant.v2.controller");
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    //为当前包下controller生成API文档 //单个配置controller
                    //.apis(RequestHandlerSelectors.basePackage("com.cnczsq.mall.elephant.v1.controller"))  
                    //controller批量配 方式一
                     .apis(Predicates.or(selector1,selector2))
                    // controller批量配方式二    指定所有controller的都实现的一个接口,比如@RestController
                    //.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                    // controller批量配方式三    指定所有controller路径的父级
                    //.apis(RequestHandlerSelectors.basePackage("com.cnczsq.mall.elephant"))
                     // controller批量配方式四    指定所有ApiOperation注解方法
                    //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                    .paths(PathSelectors.any())
                    .build();
                    //添加登录认证
                    .securitySchemes(securitySchemes()) //下面这两个不是必须
                    .securityContexts(securityContexts());
        }
    
        /**
         * 创建该API的基本信息(这些基本信息会展现在文档页面中)
         * 访问地址:http://项目实际地址/swagger-ui.html
         * @return
         */
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("Spring Boot中使用Swagger2")
                    .description("更多请关注http://www.hao123.com")
                    .termsOfServiceUrl("http://www.baidu.com")
                    .contact("zsq")
                    .version("1.0")
                    .build();
        }
    
        //end  简单配置到这里基本就够了
    
        private List<ApiKey> securitySchemes() {
            //设置请求头信息
            List<ApiKey> result = new ArrayList<>();
            ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
            result.add(apiKey);
            return result;
        }
    
        private List<SecurityContext> securityContexts() {
            //设置需要登录认证的路径
            List<SecurityContext> result = new ArrayList<>();
            result.add(getContextByPath("/brand/.*"));
            return result;
        }
    
        private SecurityContext getContextByPath(String pathRegex){
            return SecurityContext.builder()
                    .securityReferences(defaultAuth())
                    .forPaths(PathSelectors.regex(pathRegex))
                    .build();
        }
    
        private List<SecurityReference> defaultAuth() {
            List<SecurityReference> result = new ArrayList<>();
            AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            result.add(new SecurityReference("Authorization", authorizationScopes));
            return result;
        }
    }

    3.编写测试controller

    @Api(tags = "V1-AdminController" ,description = "牛的不行")
    @RestController
    @RequestMapping("/admin")
    public class AdminController {
    
        @ApiOperation(value = "测试",notes = "返回测试信息")
        @GetMapping("/select")
        @ApiImplicitParam(paramType = "query"  ,name = "name",value = "用户名")
        public Object select(String name){
            return name+"123";
        }
    
    }

    4.访问swagger  http://localhost:8090/swagger-ui.html#/    ip 端口号填自己的   ok

     

    Swagger使用的注解及其说明:

    @Api:用在类上,说明该类的作用。

    @ApiOperation:注解来给API增加方法说明。

    @ApiImplicitParams : 用在方法上包含一组参数说明。

    @ApiImplicitParam:用来注解来给方法入参增加说明。

    @ApiResponses:用于表示一组响应

    @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

        l   code:数字,例如400

        l   message:信息,例如"请求参数没填好"

        l   response:抛出异常的类   

    @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

        l   @ApiModelProperty:描述一个model的属性

     

    注意:@ApiImplicitParam的参数说明:

    paramType:指定参数放在哪个地方

    header:请求参数放置于Request Header,使用@RequestHeader获取

    query:请求参数放置于请求地址,使用@RequestParam获取

    path:(用于restful接口)-->请求参数的获取:@PathVariable

    body:(不常用)

    form(不常用)

    name:参数名

     

    dataType:参数类型

     

    required:参数是否必须传

    true | false

    value:说明参数的意思

     

    defaultValue:参数的默认值

    整合swagger-bootstrap-ui

    在原基础上添加如下配置

    <!--美化swagger-->
    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.9.3</version>
    </dependency>

    添加

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurationSupport {
        /**
         * 静态资源配置(默认)
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");// 静态资源路径
            registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
            registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
            super.addResourceHandlers(registry);
        }
    }

    http://localhost:8888/doc.html     http://localhost:8888/swagger-ui.html#/   都能访问

    微服务集群搭建swagger

     1.选择一个子服务member服务,添加pom.xml依赖

    <!--springboot 整合swagger-->
            <dependency>
                <groupId>com.spring4all</groupId>
                <artifactId>swagger-spring-boot-starter</artifactId>
                <version>1.9.0.RELEASE</version>
            </dependency>
            <!--美化swagger-->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>swagger-bootstrap-ui</artifactId>
                <version>1.9.3</version>
            </dependency>

    2.application.properties配置文件 配置swagger的 controller扫包位置

    swagger.base-package=zhang.controller

    3.启动类开启swagger注解   @EnableSwagger2Doc ,到此一个子服务配置完成,按照此方法再配置一个order子服务

    4.配置Zuul网关服务Swagger ,按照上述配置进行配置完毕,然后添加swagger来源配置类

    //swagger2添加文档来源 配置
    @Component
    @Primary
    public class DocumentConfig implements SwaggerResourcesProvider {
        @Override
        public List<SwaggerResource> get() {
            List<SwaggerResource> resources=new ArrayList<>();
            resources.add(swaggerResource("member","/api-member/v2/api-docs","2.0"));
            resources.add(swaggerResource("order","/api-order/v2/api-docs","2.0"));
            return resources;
        }
    
        /**
         * @param name 一般起服务别名
         * @param localhost  地址    网关配置以/api-member/**路径访问member服务 故这里以 /api-member开头配置
         *                           网关配置以/api-order/**路径访问order服务 故这里以 /api-order开头配置
         * @param version 版本
         */
        private SwaggerResource swaggerResource(String name,String localhost,String version) {
            SwaggerResource swaggerResource=new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(localhost);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }
    }
    

    5.直接访问,Zuul网关端口为80 ,  http://localhost:80/doc.html     http://localhost:80/swagger-ui.html#/   都能访问

    展开全文
  • Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心集群搭建 前言 之前的文章讲解了配置中心的搭建,今天来讲一讲config-sever集群搭建。 config-sever集群搭建微服务架构中,所有服务都从配置中心...

    Spring Cloud Hoxton 版本微服务项目搭建 config 配置中心集群搭建


    前言

    之前的文章讲解了配置中心的搭建,今天来讲一讲config-sever集群搭建。


    config-sever集群搭建

    在微服务架构中,所有服务都从配置中心获取配置,配置中心一旦宕机,会发生很严重的问题,下面我们搭建一个双节点的配置中心集群来解决该问题。

    启动两个config-server分别运行在4010和4011端口上;

    添加config-client的配置文件bootstrap-cluster.yml,主要是添加了从注册中心获取配置中心地址的配置并去除了配置中心uri的配置:

    server:
      port: 4011
    
    spring:
      application:
        name: config-client
      cloud:
        # config客户端配置
        config:
          # 分支名称
          label: master
          # 启用配置后缀名称
          profile: dev
          # 配置文件名称
          name: config
          # config-sever集群搭建
          discovery:
            enabled: true
            service-id: config-center
    
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:8888/eureka/
    

    以bootstrap-cluster.yml启动config-client服务

    访问 http://localhost:4011/configInfo,发现config-client可以获取到配置信息。

    config info for config dir dev(master)
    

    最后

    • 更多参考精彩博文请看这里:《陈永佳的博客》

    • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

    展开全文
  • 搭建微服务集群

    2020-08-13 11:02:31
    一、Eureka 注册中心集群(此处示例两个注册中心即可) 第一个Eureka 配置文件 server: port: 8761 eureka: server: # 自我保护(缺省为true:开启) enable-self-preservation: false # 清理服务器 ...

     

    一、Eureka 注册中心集群(此处示例两个注册中心即可)

    1. 第一个Eureka 配置文件

    server:

      port: 8761

    eureka:

      server:

        # 自我保护(缺省为true:开启)

        enable-self-preservation: false

        # 清理服务器

        eviction-interval-timer-in-ms: 5000  # 清理间隔(单位毫秒,默认是60*1000)启用主动失效,并且每次主动失效检测间隔为3s

      instance:

        hostname: 127.0.0.1 #服务注册中心IP地址,在同一个服务器上此处可用虚拟IP

      client:

        registerWithEureka: false #表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false

        fetchRegistry: false #表示表示是否从EurekaServer获取注册信息,默认为true。单节点不需要同步其他的EurekaServer节点的数据

        serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置

          defaultZone: http://127.0.0.2:8762/eureka/ #另一个注册中心的地址,注册中心互相注册,如果有三个注册中心,这里写另外两个注册中心地址,用逗号分开。

     

    1. 第二个 Eureka 配置文件

    server:

      port: 8762

    eureka:

      server:

        # 自我保护(缺省为true:开启)

        enable-self-preservation: false

        # 清理服务器

        eviction-interval-timer-in-ms: 5000  # 清理间隔(单位毫秒,默认是60*1000)启用主动失效,并且每次主动失效检测间隔为3s

      instance:

        hostname: 127.0.0.2 #服务注册中心IP地址,在同一个服务器上此处可用虚拟IP

      client:

        registerWithEureka: false #表示是否将自己注册在EurekaServer上,默认为true。由于当前应用就是EurekaServer,所以置为false

        fetchRegistry: false #表示表示是否从EurekaServer获取注册信息,默认为true。单节点不需要同步其他的EurekaServer节点的数据

        serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置

          defaultZone: http://127.0.0.1:8761/eureka/ #另一个注册中心的地址,注册中心互相注册,如果有三个注册中心,这里写另外两个注册中心地址,用逗号分开。

    1. 到这里注册中心集群就搭建好了,多个注册中心互相注册即可

     

    二、微服务集群搭建

    1. 微服务配置文件中 Eureka 配置,多个注册中心用逗号隔开,就会把这个服务同时注册到这两个注册中心。
    2. 微服务集群即就是同一服务开多个,端口号不同,服务名称必须一致,因为微服务之间是通过服务名称寻找对方的。

    eureka:

      client:

        #registerWithEureka: false #是否向服务注册中心注册自己

        #fetchRegistry: false #是否检索服务

        service-url:

          defaultZone: http://127.0.0.1:8761/eureka/,http://127.0.0.2:8762/eureka/

      instance:

        prefer-ip-address: true

        instance-id: zuul:127.0.0.1:9000

    展开全文
  • @[TOC](微服务集群环境搭建步骤(Ubuntu+Eureka+Docker swarm compose dockerspace + Maven)) 1.更换阿里源镜像 sudo nano /etc/apt/sources.list #deb cdrom:[Ubuntu 16.04 LTS Xenial Xerus - Release amd64 ...
  • 微服务集群搭建

    千次阅读 2018-08-22 22:01:13
    为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制。在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决。  Web负载均衡  Web负载均衡(Load Balancing)...
  • { "Routes": [ { "UpstreamPathTemplate": "/{url}", //服务地址 "DownstreamPathTemplate": "/{url}", //网关地址 ... "UpstreamHttpMethod": [ "Get", "Post" ], //请求方式 "UseServiceDiscovery": true, //...
  • 实现Eureka集群(eurekaServer):8001、8002、8003服务提供方(eurekaClient):9001、9002服务端负载均衡服务:91001、新建工程eureka服务器,用idea创建springboot项目,引入eureka依赖下面是三台服务器的配置文件//...
  • 前端技术 ... JQuery Vue.js 2.0以及基于Vue的UI框架:Vuetify 前端构建工具:WebPack 前端安装包工具:NPM Vue脚手架:Vue-cli ajax框架:axios 基于Vue的富文本框架:quill-editor ...基础的SpringMVC、Spring5.0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,328
精华内容 531
关键字:

微服务集群搭建