标签分类
技术文章
当前位置:主页 > 计算机编程 > java > Spring Cloud实战技巧之使用随机端口

Spring Cloud 使用随机端口实例

  • 发布时间:
  • 作者:码农之家原创
  • 点击:58

Spring Cloud实战技巧之使用随机端口

这篇文章主要知识点是关于springcloud,随机端口,spring,cloud,端口,spring,cloud,Spring Cloud实战技巧之使用随机端口,的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

微服务架构实战:基于Spring Boot、Spring Cloud、Docker
  • 类型:微服务大小:179.6 MB格式:PDF出版:人民邮电出版社作者:郑天民
立即下载

更多相关的学习资源可以参阅 程序设计电子书Java电子书、等栏目。

前言

在Spring Cloud构建微服务架构中,我们经常会需要启动多个实例的情况来测试注册中心、配置中心等基础设施的高可用,也会用来测试客户端负载均衡的调用等。但是,我们一个应用只能有一个端口号,这就使得在本机测试的时候,不得不为同一个服务设置不同的端口来进行启动。

在本地用不同端口启动同一服务实例的方法有很多。最传统的我们可以粗暴地修改配置文件中的server.port属性来分别启动多个实例,这种方法虽然可以实现,但是非常的不方便。比较好的一种方法是在启动的时候通过命令的方式为server.port属性来设置不同的值,这样我们的配置文件就不用反复的进行修改了。

在本文中,我们将介绍另外一种方法:

采用随机端口的方式来设置各个服务实例,这样我们不用去编辑任何命令就可以在本地轻松地启动多个实例了。

使用随机端口

为Spring Cloud的应用实用随机端口非常简单,主要有两种方法:

1、设置server.port=0,当应用启动的时候会自动的分配一个随机端口,但是该方式在注册到Eureka的时候会一个问题:所有实例都使用了同样的实例名(如:Lenovo-zhaiyc:hello-service:0),这导致只出现了一个实例。所以,我们还需要修改实例ID的定义,让每个实例的ID不同,比如使用随机数来配置实例ID:

server.port=0
eureka.instance.instance-id=${spring.application.name}:${random.int}

2、除了上面的方法,实际上我们还可以直接使用random函数来配置server.port。这样就可以指定端口的取值范围,比如:

server.port=${random.int[10000,19999]}

由于默认的实例ID会由server.port拼接,而此时server.port设置的随机值会重新取一次随机数,所以使用这种方法的时候不需要重新定义实例ID的规则就能产生不同的实例ID了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到spring+springmvc+mybatis整合注、 儿童python编程入门书籍推、 详解vue axios封装请求状态、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:JNI实现最简单的JAVA调用C/C++实例代码讲解

下一篇:java二分法算法的知识点详解

展开 +

收起 -

学习笔记
网友NO.151580

SpringCloud用Zookeeper搭建配置中心的方法

本文介绍了SpringCloud +Zookeeper完成配置中心,分享给大家,具有如下: 使用场景 项目配置更改不需要打包,重启 提供配置文件的可视化界面 和springcloud快速整合 为什么使用zookeeper Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用主要是用来维护和监控存储的数据的状态变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理。 怎么使用 1.pom文件 !-- 提供zookeeper整合的包 --dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-zookeeper-config/artifactId/dependency!-- springboot 提供监听的 --dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId/dependency 2.bootstrap.properties文件 提示: springboot项目启动会优先读取 bootstrap.properties.然后获取zookeeper中的配置内容,才启动其他配置 #指定zookeeper的地址,多个用逗号拼接spring.cloud.zookeeper.connect-string=192.168.100.0:2181#指定springcloud 读取zookeeper路径的开始位置spring.cloud.zookeeper.config.root=springcloud#开始zk的配置spring.cloud.zookeeper.config.enabled=true#zk会在你指定的根目录下寻找以这个项目名命名的目录下的配置spring.application.name=service_config 3.获取zookeeper中的配置 1……

网友NO.591418

springcloud Zuul动态路由的实现

前言 Zuul 是Netflix 提供的一个开源组件,致力于在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。也有很多公司使用它来作为网关的重要组成部分,碰巧今年公司的架构组决定自研一个网关产品,集动态路由,动态权限,限流配额等功能为一体,为其他部门的项目提供统一的外网调用管理,最终形成产品(这方面阿里其实已经有成熟的网关产品了,但是不太适用于个性化的配置,也没有集成权限和限流降级)。 不过这里并不想介绍整个网关的架构,而是想着重于讨论其中的一个关键点,并且也是经常在交流群中听人说起的:动态路由怎么做? 再阐释什么是动态路由之前,需要介绍一下架构的设计。 传统互联网架构图 上图是没有网关参与的一个最典型的互联网架构(本文中统一使用book代表应用实例,即真正提供服务的一个业务系统) 加入eureka的架构图 book注册到eureka注册中心中,zuul本身也连接着同一个eureka,可以拉取book众多实例的列表。服务中心的注册发现一直是值得推崇的一种方式,但是不适用与网关产品。因为我们的网关是面向众多的其他部门的已有或是异构架构的系统,不应该强求其他系统都使用eureka,这样是有侵入性的设计。 最终架构图 要强调的一点是,gateway最终也会部署多个实例,达到分布式的……

网友NO.472216

详解Spring Cloud Gateway基于服务发现的默认路由规则

1.Spring Gateway概述 1.1 什么是Spring Cloud Gateway Spring Cloud Gateway 是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。 1.2 Spring Cloud Gateway的功能 Spring Cloud Gateway 的特征: 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 动态路由 Predicates 和 Filters 作用于特定路由 集成 Hystrix 断路器 集成 Spring Cloud DiscoveryClient 易于编写的 Predicates 和 Filters 限流 路径重写 2. Spring Cloud Gateway的工程流程 客户端向 Spring Cloud Gateway 发出请求。然后在 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。 2.1 Pre和POST两种类型的过滤器 3.基于服务发现的默认路由规则 3.1 zuul和gateway的默认路由规则 3.1.1 zuul的默认路由规则 说明默认情况下,Zuul会代理所有注册到……

网友NO.560766

Spring Cloud如何使用Feign构造多参数的请求

本节我们来探讨如何使用Feign构造多参数的请求。笔者以GET以及POST方法的请求为例进行讲解,其他方法(例如DELETE、PUT等)的请求原理相通,读者可自行研究。 GET请求多参数的URL 假设我们请求的URL包含多个参数,例如http://microservice-provider-user/get?id=1} 然而,这种写法并不正确,控制台会输出类似如下的异常。 feign.FeignException: status 405 reading UserFeignClient#get0(User); content: {"timestamp":1482676142940,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/get"} 由异常可知,尽管我们指定了GET方法,Feign依然会使用POST方法发送请求。 正确写法如下: (1) 方法一 @FeignClient(name = "microservice-provider-user")public interface UserFeignClient { @RequestMapping(value = "/get", method = RequestMethod.GET) public User get1(@RequestParam("id") Long id, @RequestParam("username") String username);} 这是最为直观的方式,URL有几个参数,Feign接口中的方法就有几个参数。使用@RequestParam注解指定请求的参数是什么。 (2) 方法二 多参数的URL也可使用Map来构建。当目标URL参数非常多的时候,可使用这种方式简化Feign接口的编写。 @FeignClient(name = "microservice-provider-user")public interface UserFeignClient { @RequestMapping(value = "/get", method = RequestMet……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明