springcloud

springcloud eureka

Eureka 介绍

Eureka主要由两个组件组成:Eureka服务器和Eureka客户端。 Eureka服务器用作服务注册服务器。 Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。

demo

pom文件

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

配置文件

server:port: 8801spring:application:name:eureka-servereureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://192.168.1.154:8801/eureka/
  • spring.application.name: 这个是指定服务名称。
  • server.port:服务指定的端口。
  • eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认是true。
  • eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。
  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。

启动类

在服务端这边只需要在SpringBoot启动类添加@EnableEurekaServer注解就可以了,该注解表示此服务是一个服务注册中心服务

package com.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

Eureka高可用

单点服务注册中心生产环境中就显得不适合,显然这并不适合应用于线上生产环境。作为分布式系统最重要的注册服务功能,为了使其高可用,使用集群是最普遍的方式。Eureka可以通过互相注册的方式来实现高可用的部署。

Eureka实现相互注册的方式很简单,只需要将各个服务端的地址相互进行配置即可

高可用创建

创建两个或多个相同的单点服务注册项目。只需要修改项目的配置信息即可

多个服务项目注册

server2配置信息:

spring.application.name=springcloud-eureka-server
server.port=8002
# 服务地址别名
eureka.instance.hostname = server2
## 这里设置另一个Eureka Server交互的地址,如果是多个就通过 ","逗号隔开,如果是超过三个服务中心这里就其余两个
eureka.client.serviceUrl.defaultZone=http://server3:8003/eureka/

server3配置信息:

spring.application.name=springcloud-eureka-server
server.port=8003
# 服务地址别名
eureka.instance.hostname = server3
## 这里设置另一个Eureka Server交互的地址,如果是多个就通过 ","逗号隔开
eureka.client.serviceUrl.defaultZone=http://server2:8002/eureka/

上述的配置在之前已经说过了,这里就不在过多描述了。这里的服务端配置和之前项目的服务端配置略有不同,允许自己进行注册了。并且这里的eureka.instance.hostname相当于是对服务地址起一个别名,也可以不配置,默认将会使用IP进行查找。eureka.client.serviceUrl.defaultZone这里配置的是另一个服务端的地址,如果是多个就通过 ","逗号隔开。

因为这里使用了别名进行区分服务,所以需要在hosts文件添加如下配置,用于做映射。

127.0.0.1     server2
127.0.0.1     server3

hosts文件地址:

Windows 系统地址:C:\Windows\System32\drivers\etc\hosts

Linux系统地址: /etc/hosts

配置完成之后,启动这两个服务,然后在浏览器输入:
http://server2:8002/

http://server3:8003/

springcloud config

config介绍

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。

demo

config server

配置中心服务端

pom
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件
spring:profiles:active: gitapplication:name: spring-cloud-configcloud:config:server:git:uri: https://gitee.com/zhujiayu80/springcloud-configusername: zhujiayu80@163.compassword: zjy159357
server:port: 8903
eureka:client:serviceUrl:defaultZone: http://192.168.1.154:8801/eureka/

配置说明:

  • spring.application.name: 这个是指定服务名称。
  • server.port:服务指定的端口。
  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。
  • spring.cloud.config.server.git.uri: 配置的Git长裤的地址。
  • spring.cloud.config.server.git.search-paths: git仓库地址下的相对地址 多个用逗号","分割。
  • spring.cloud.config.server.git.username:git仓库的账号。
  • spring.cloud.config.server.git.password:git仓库的密码。

注:如果想使用本地方式读取配置信息,那么只需将spring.cloud.config.server.git的配置改成spring.profiles.active=native,然后在resources路径下新增一个文件即可。

启动类

代码这块也很简单,在程序主类中,额外添加@EnableConfigServer注解,该注解表示启用config配置中心功能。代码如下:

package com.springcloudconfig.config;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigApplication {public static void main(String[] args) {SpringApplication.run(ConfigApplication.class, args);}
}

config client

配置中心客户端

pom
 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
配置信息
spring.cloud.config.name=feign-consumer
spring.cloud.config.profile=test
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=spring-cloud-config
eureka.client.serviceUrl.defaultZone=http://192.168.1.154:8801/eureka/

配置说明:

  • spring.cloud.config.name: 获取配置文件的名称。
  • spring.cloud.config.profile: 获取配置的策略。
  • spring.cloud.config.label:获取配置文件的分支,默认是master。如果是是本地获取的话,则无用。
  • spring.cloud.config.discovery.enabled: 开启配置信息发现。
  • spring.cloud.config.discovery.serviceId: 指定配置中心的service-id,便于扩展为高可用配置集群。
  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。

:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为bootstrap.properties的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。需要注意的是eureka.client.serviceUrl.defaultZone要配置在bootstrap.properties,不然客户端是无法获取配置中心参数的,会启动失败! 、

application.properties配置

spring.application.name=springcloud-config-client
server.port=9006

配置说明:

  • spring.application.name: 这个是指定服务名称。
  • server.port:服务指定的端口。
启动类
package com.cloud.feign.feign;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@EnableEurekaClient
public class FeignApplication {public static void main(String[] args) {SpringApplication.run(FeignApplication.class, args);}
}
controller

为了方便查询,在控制中进行参数的获取,并返回。@Value注解是默认是从application.properties配置文件获取参数,但是这里我们在客户端并没有进行配置,该配置在配置中心服务端,我们只需指定好了配置文件之后即可进行使用

package com.cloud.feign.feign.api;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author: ZJY* @Date: 2020/4/30 9:26*/
@RestController
@RequestMapping
public class GetHelloController {@Value("${name}")private String name;@GetMapping("/getBootstrap")public String getBootstrap(){return name;}
}

git服务器配置文件

feign-consumer-dev.yml

文件内容:name:hello

测试

依次启动项目:eureka、config、client 。调用接口localhost:9006/getBootstrap

常见问题

1.如果出现直接访问config server可行。但是通过config client获取git服务器中的配置信息报错。要查看client中配置的文件名是否正确,或者等几分钟重新启动client。因为获取server中的配置信息需要时间。

Feign服务消费者和负载均衡Ribbon

SpringCloud Feign

Feign 介绍

Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。

dome

pom文件
      <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
feign客户端

这里我们定义两个消费者,springcloud-feign-consumerspringcloud-feign-consumer1,一个使用feign做转发,另一个为一个普通的项目。 添加如上的依赖之后,在application.properties`添加如下的配置:

consumer配置信息

bootstrap.properties 基于config远程配置

eureka.client.serviceUrl.defaultZone=http://192.168.1.154:8801/eureka/
spring.cloud.config.name=feign-consumer
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=spring-cloud-config

application.proterties

spring.application.name=springcloud-feign-consumer
server.port=8802
consumer1配置信息

bootstrap.properties 基于config远程配置

eureka.client.serviceUrl.defaultZone=http://192.168.1.154:8801/eureka/
spring.cloud.config.name=feign-consumer
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=spring-cloud-config

application.proterties

#consumer根据该名称远程调用consumer1中的功能
spring.application.name=springcloud-feign-consumer1
server.port=8802

配置说明:

  • spring.application.name: 这个是客户端的服务名称。如果有多个服务使用同一个名称但是访问地址不同,结合ribbon 使用,则可以实现负载均衡功能。
  • server.port:服务指定的端口。
  • eureka.client.serviceUrl.defaultZone: 注册中心服务端的地址
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignApplication {public static void main(String[] args) {SpringApplication.run(FeignApplication.class, args);}
}

需要定义转发的服务,这里使用@FeignClient注解来实现,该注解表示需要转发服务的名称,该名称在application.properties中进行配置。 这里我们把请求转发到第二个服务 springcloud-feign-consumer1。即通过consume调用consumer1中的功能。

consumer中转发类接口
@FeignClient(value = "springcloud-feign-consumer1")
public interface SayHello {@RequestMapping(value = "hello",method = RequestMethod.GET)public String getHello();
}
service类
@Service
public class HelloService {@Autowiredprivate SayHello sayHello;public String getHello(String name){return sayHello.getHello();}
}
controller类
@RestController
@RequestMapping
public class GetHelloController {@AutowiredHelloService helloService;@Value("${name}")private String name;@GetMapping("/getHello")public String getHello(String name){String hello = helloService.getHello(name);return hello;}@GetMapping("/getBootstrap")public String getBootstrap(){return name;}
}
consumer1启动类
@SpringBootApplication@EnableDiscoveryClientpublic class FeignConsumerApplication2 {public static void main(String[] args) {SpringApplication.run(FeignConsumerApplication2.class, args);System.out.println("feign第二个消费者服务启动...");}}
controller1类
@RestControllerpublic class ConsumerController {@RequestMapping("/hello")public String index(@RequestParam String name) {return name+",Hello World";}}
测试

可以通过访问http://localhost:8802/getHello?name=test调用controller1中的接口“/hello”返回“test,Hello World”。

springcloud ribbon

ribbon介绍

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。简单地说,Ribbon是一个客户端负载均衡器。 

demo

pom
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

客户端

这里我们定义三个服务,一个服务使用Ribbon做负载均衡,另外两个做普通的服务,服务名称依次为springcloud-ribbon-consumerspringcloud-ribbon-consumer2springcloud-ribbon-consumer3。 添加如上的依赖之后,在application.properties添加如下的配置:

consumer 配置信息:

spring.application.name=springcloud-ribbon-consumer
server.port=9006
eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

consumer2 配置信息:

spring.application.name=springcloud-ribbon-consumer2
server.port=9007
eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

consumer3 配置信息:

这里的服务名称和另一个服务的名称保持一致才能实现负载均衡功能。

spring.application.name=springcloud-ribbon-consumer2
server.port=9008
eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

配置说明:

  • spring.application.name: 这个是客户端的服务名称。如果有多个服务使用同一个名称但是访问地址不同,结合ribbon 使用,则可以实现负载均衡功能。
  • server.port:服务指定的端口。
  • eureka.client.serviceUrl.defaultZone: 注册中心服务端的地址。
springcloud-ribbon-consumer

使用Ribbon实现负载均衡,只需要在启动类中实例化RestTemplate,通过@LoadBalanced注解开启均衡负载能力.。

启动类
@SpringBootApplication@EnableDiscoveryClientpublic class RibbonConsumerApplication {public static void main(String[] args) {SpringApplication.run(RibbonConsumerApplication.class, args);System.out.println("ribbon第一个消费者服务启动...");}@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}

需要定义转发的服务,这里使用RestTemplate来进行调用,调用另外一个服务的名称

转发类controller
@RestControllerpublic class ConsumerController {@AutowiredRestTemplate restTemplate;@RequestMapping("/hello")public String hello() {//进行远程调用return restTemplate.getForObject("http://springcloud-ribbon-consumer2/hello/?name=xuwujing", String.class);}}

springcloud-ribbon-consumer2springcloud-ribbon-consumer3代码基本和fegin中的springcloud-feign-consumer一样,因此这里就不在贴代码了。

测试

http://localhost:9006//hello

然后进行重复访问,返回如下结果:

xuwujing,Hello World!
xuwujing,Hello World! 这是另一个服务!
xuwujing,Hello World!
xuwujing,Hello World! 这是另一个服务!
xuwujing,Hello World!
xuwujing,Hello World! 这是另一个服务!

说明已经实现了负载均衡功能了。 通过consume访问consumer2和consumer3.

我们从上述的结果中发现了一点,这个调用貌似是有规律的,两个服务进行来回调用。那么根据这个我们发现了,负载均衡是由策略的。上述的这个示例的策略就是其中的一个RoundRobinRule轮询策略。

这里就顺便说下Ribbon的策略,Ribbon一共有7中策略,默认使用的策略是轮询。策略说明如下表格:

策略名 策略声明 策略描述 实现说明
BestAvailableRule public class BestAvailableRule extends ClientConfigEnabledRoundRobinRule 选择一个最小的并发请求的server 逐个考察Server,如果Server被tripped了,则忽略,在选择其中ActiveRequestsCount最小的server
AvailabilityFilteringRule public class AvailabilityFilteringRule extends PredicateBasedRule 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值) 使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个server的运行状态
WeightedResponseTimeRule public class WeightedResponseTimeRule extends RoundRobinRule 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。 一个后台线程定期的从status里面读取评价响应时间,为每个server计算一个weight。Weight的计算也比较简单responsetime 减去每个server自己平均的responsetime是server的权重。当刚开始运行,没有形成status时,使用roubine策略选择server。
RetryRule public class RetryRule extends AbstractLoadBalancerRule 对选定的负载均衡策略机上重试机制。 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
RoundRobinRule public class RoundRobinRule extends AbstractLoadBalancerRule roundRobin方式轮询选择server 轮询index,选择index对应位置的server
RandomRule public class RandomRule extends AbstractLoadBalancerRule 随机选择一个server 在index上随机,选择index对应位置的server
ZoneAvoidanceRule public class ZoneAvoidanceRule extends PredicateBasedRule 复合判断server所在区域的性能和server的可用性选择server 使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server,前一个判断判定一个zone的运行性能是否可用,剔除不可用的zone(的所有server),AvailabilityPredicate用于过滤掉连接数过多的Server。

这里也顺便说明如何指定一个策略使用方法。

最简单的方式

application.properties添加如下配置:

springcloud-ribbon-consumer2.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

该配置的意思是为springcloud-ribbon-consumer2服务指定随机策略。

另一种方式

新建一个类,通过@Bean注解指定策略。

	@Configurationpublic class RibbonConfiguration{@Beanpublic IRule ribbonRule(){        return new RandomRule();}}

然后再通过@RibbonClien注解指定服务。

	@RibbonClient(name="springcloud-ribbon-consumer2", configuration=RibbonConfiguration.class)public class HelloRibbon{	 }

注: 如果有的服务没有在Eureka进行注册,可以使用ribbon.listOfServers方式在配置文件中来指定服务。

例如:

springcloud-ribbon-consumer2.ribbon.listOfServers:localhost:9007,localhost:9008

添加好了该配置之后,我们重启springcloud-ribbon-consumer服务,然后依旧重复访问 http://localhost:9006//hello 该地址,
访问的结果如下:

xuwujing,Hello World!
xuwujing,Hello World! 这是另一个服务!
xuwujing,Hello World! 这是另一个服务!
xuwujing,Hello World!
xuwujing,Hello World!
xuwujing,Hello World!

可以看到已经成功实现了随机访问的策略!

springcloud feign结合ribbon实现负载均衡

Fegin包含了Ribbon,可以直接实现负载均衡功能。这里我们就在Ribbon的项目稍微进行改造下实现该功能。

首先在pom文件添加Fegin的依赖包。

	<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

然后在springcloud-ribbon-consumer项目的启动类上添加@EnableFeignClients注解,启用feign进行远程调用。

添加完成之后,新建一个类,实现feign远程调用。
代码如下:

	@FeignClient(name= "springcloud-ribbon-consumer2") public interface HelloRemote {@RequestMapping(value = "/hello")public String hello(@RequestParam(value = "name") String name);}

最后在提供一个新的接口供外部调用。这里就直接在之前的代码上新加一个接口了。
代码如下:

	@RestControllerpublic class ConsumerController {@AutowiredRestTemplate restTemplate;@RequestMapping("/hello")public String hello() {return restTemplate.getForObject("http://springcloud-ribbon-consumer2/hello/?name=xuwujing", String.class);}@AutowiredHelloRemote helloRemote;@RequestMapping("/hello/{name}")public String index(@PathVariable("name") String name) {System.out.println("接受到请求参数:"+name+",进行转发到其他服务!");return helloRemote.hello(name);}}

添加完之后,重启springcloud-ribbon-consumer服务,然后依旧重复访问 http://localhost:9006//hello/pancm 该地址,
访问的结果如下:

pancm,Hello World!
pancm,Hello World! 这是另一个服务!
pancm,Hello World!
pancm,Hello World! 这是另一个服务!
pancm,Hello World!
pancm,Hello World! 这是另一个服务!

Hystrix断路器和Dashboard断路器监控

SpringCloud Hystrix

Hystrix介绍

Netflix创建了一个名为Hystrix的库,它实现了断路器模式。主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线。

demo

pom文件
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

注: 实际上这里是不需要Hystrix依赖的,Fegin已经添加了Hystrix依赖。

客户端

这里我们把之前的springcloud-fegin-consumer项目稍微改造下,项目名改为springcloud-hystrix-consumer。然后在application.properties配置文件新增如下配置, feign.hystrix.enabled配置表示是否启用熔断机制。

feign.hystrix.enabled=true

增加了配置之后,我们在来把之前的fegin进行定义转发服务的@FeignClient注解进行添加一个回调方法fallback。代码改造后的实现如下:

@FeignClient(value = "ribbon-provice",fallback = SayHelloImp.class)
public interface SayHello {@RequestMapping(value = "hello",method = RequestMethod.GET)public String getHello();
}

新增一个回调类SayHelloImp,用于处理断路的情况

@Component
public class SayHelloImp implements SayHello {@Overridepublic String getHello() {return "调用失败!";}
}
断路情况另一种处理方法

在方法上添加回调方法

 @HystrixCommand(fallbackMethod = "getHello")public String sayHello(String name){return restTemplate.getForObject("http://ribbon-provice/hello" + name,String.class);}
测试

完成如上的工程开发之后,我们依次启动服务端和客户端的

SpringCloud Hystrix-Dashboard

Hystrix-Dashboard 介绍

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。

demo

pom文件
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
启动类

在启动类上添加

  • EnableCircuitBreaker:表示启用hystrix功能。
  • EnableHystrixDashboard:启用 HystrixDashboard 断路器看板 相关配置。
@SpringBootApplication@EnableDiscoveryClient@EnableHystrixDashboard@EnableCircuitBreaker@EnableFeignClientspublic class HystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(HystrixDashboardApplication.class, args);System.out.println("hystrix dashboard 服务启动...");}}

然后在到application.properties配置文件中新增如下配置:

	management.endpoints.web.exposure.include=hystrix.streammanagement.endpoints.web.base-path=/

该配置的意思是指定hystrixDashboard的访问路径,SpringBoot2.x以上必须指定,不然是无法进行访问的,访问会出现 Unable to connect to Command Metric Stream 错误。

如果不想使用配置的话,也可以使用代码进行实现。
实现的代码如下:

	@Componentpublic class HystrixServlet extends Servlet{@Beanpublic ServletRegistrationBean getServlet() {HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);registrationBean.setLoadOnStartup(1);registrationBean.addUrlMappings("/hystrix.stream");registrationBean.setName("HystrixMetricsStreamServlet");return registrationBean;}	}

功能测试

完成如上的工程改造之后,我们启动该程序。
然后在浏览器输入:

http://localhost:9010/hystrix

会出现以下的界面:

在这里插入图片描述

可以通过该界面监控使用了hystrix dashboard的项目。这里我们依照提示在中间的输入框输入如下的地址:

http://localhost:9010/hystrix.stream

会出现以下的界面:

img

该界面就是Hystrix Dashboard监控的界面了,通过这个界面我们可以很详细的看到程序的信息。关于这些信息中说明可以用网上找到的一张来加以说明。

img

: 如果界面一直提示loading,那么是因为没有进行请求访问,只需在到浏览器上输入:http://localhost:9010/hello/pancm,然后刷新该界面就可以进行查看了。

SpringCloud Zuul

介绍

Spring Cloud Zuul 主要的功能是提供负载均衡、反向代理、权限认证、动态路由、监控、弹性、安全等的边缘服务。其主要作用是为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

demo

zuul服务

注册中心服务配置完成之后,我们在新增一个Zuul服务,该服务的名称为springcloud-zuul-gateway,该服务的 pom配置、application.properties配置和代码如下:

pom:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>	<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>
</dependencies>

application.properties:

spring.application.name=springcloud-zuul-gateway
server.port = 9009
eureka.client.serviceUrl.defaultZone=http://localhost:8006/eureka/
zuul.routes.hello.path = /hello/**
zuul.routes.hello.url = http://localhost:9010/hello
zuul.routes.hi.path = /hi/**
zuul.routes.hi.url = http://localhost:9011/hi

配置说明:

  • spring.application.name: 这个是指定服务名称。
  • server.port:服务指定的端口。
  • eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。
  • zuul.routes.{route}.path:自定义路由的规则,通过path配置路径进行过滤;
  • zuul.routes.{route}.url: 自定义路由的规则,访问上述的路径会转发到该配置的地址;

注:上述的zuul.routes.{route}.pathzuul.routes.{route}.url一般来说是作为传统的方式进行配置,是不依赖于Eureka,是属于一对一的配置。例如,访问:http://localhost:9009/hello/pancm 的话就会跳转到http://localhost:9010/hello/pancm 地址上。

代码:

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy   
public class ZuulApplication {public static void main(String[] args) {SpringApplication.run(ZuulApplication.class, args);System.out.println("zuul 服务启动...");}
}

客户端

这里我们也需要创建两个客户端服务,来进行验证Zuul路由网关是否生效。
创建两个客户端服务,名称分别为springcloud-zuul-server1springcloud-zuul-server2,两个pom文件的配置如下:

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
</dependencies>

两个application.properties配置文件也基本相同,除了名称和端口不一致。

springcloud-zuul-server1application.properties配置:

spring.application.name=springcloud-zuul-server1
server.port=9010
eureka.client.serviceUrl.defaultZone=http://localhost:8801/eureka/

springcloud-zuul-server2application.properties配置:

spring.application.name=springcloud-zuul-server2
server.port=9011
eureka.client.serviceUrl.defaultZone=http://localhost:8801/eureka/

springcloud-zuul-server1服务的代码:

主类

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class FeignApplication {public static void main(String[] args) {SpringApplication.run(FeignApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate(){return new RestTemplate();}
}

控制层:

@RestController
@RequestMapping("/hello")
public class GetHelloController {@AutowiredHelloService helloService;@Value("${name}")private String name;@GetMapping("/getHello")public String getHello(){String hello = helloService.getHello();return hello;}@GetMapping("/sayHello")public String sayHello(String string){String s = helloService.sayHello(string);return s;}@GetMapping("/getBootstrap")public String getBootstrap(){return name;}}

}

`springcloud-provice服务的代码:

主类

@SpringBootApplication
@EnableEurekaClient
public class ProviceApplication {public static void main(String[] args) {SpringApplication.run(ProviceApplication.class, args);}
}

控制层:

@RequestMapping("/test")
public class HelloController {@GetMapping("/test")public String test(){System.out.println("ceshi");return "test,你好!";}@GetMapping("/hello")public String getHello(){return "hello !";}
}

注:这里故意将两个服务的接口参数请求和返回值弄成不一样,以便对Zull的功能进行多方面测试。

测试

完成上述的代码开发后,我们来进行测试springcloud-zuul是否可以地址过滤转发功能。
首先依次启动springcloud-zuul-eurekaspringcloud-zuul-gatewayspringcloud-zuul-server1springcloud-zuul-server2这四个项目。其中9009是服务springcloud-zuul-gateway的端口,9010是第一个客户端springcloud-zuul-server1的端口,9011是第二个客户端springcloud-zuul-server2的端口。
启动成功之后,在浏览器输入:

<http://localhost:8802/hello/getHello

界面返回:

hello

在浏览器输入:

<http://localhost:8804/test/hello

界面返回:

hello !

可以看出程序正常启动,并且客户端的接口返回正确!
那么我们再来使用同样路径来访问zuul,因为是在本地进行测试,因此只需要更改下端口就可以了,将上述在浏览器访问的地址的端口自都改成9009。

@SpringBootApplication
@EnableEurekaClient
public class ProviceApplication {public static void main(String[] args) {SpringApplication.run(ProviceApplication.class, args);}
}

控制层:

@RequestMapping("/test")
public class HelloController {@GetMapping("/test")public String test(){System.out.println("ceshi");return "test,你好!";}@GetMapping("/hello")public String getHello(){return "hello !";}
}

注:这里故意将两个服务的接口参数请求和返回值弄成不一样,以便对Zull的功能进行多方面测试。

测试

完成上述的代码开发后,我们来进行测试springcloud-zuul是否可以地址过滤转发功能。
首先依次启动springcloud-zuul-eurekaspringcloud-zuul-gatewayspringcloud-zuul-server1springcloud-zuul-server2这四个项目。其中9009是服务springcloud-zuul-gateway的端口,9010是第一个客户端springcloud-zuul-server1的端口,9011是第二个客户端springcloud-zuul-server2的端口。
启动成功之后,在浏览器输入:

<http://localhost:8802/hello/getHello

界面返回:

hello

在浏览器输入:

<http://localhost:8804/test/hello

界面返回:

hello !

可以看出程序正常启动,并且客户端的接口返回正确!
那么我们再来使用同样路径来访问zuul,因为是在本地进行测试,因此只需要更改下端口就可以了,将上述在浏览器访问的地址的端口自都改成9009。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java从入门到精通- Java VisualVM 插件介绍

    官方和第三方插件可以轻松扩展VisualVM功能。使用工具| 插件| 可用插件可从VisualVM插件中心下载插件。IDE集成插件可在此处获得。要在离线环境中扩展VisualVM功能,请在“ 插件中心”页面上获取插件,然后使用“工具” |“工具”。插件| 下载以安装它们。由于VisualVM 2.0中的…...

    2024/4/30 0:12:14
  2. 【编译原理笔记】第四章

    第四章 语法分析 语法分析程序的功能和语法分析方法自顶向下语法分析法自底向上算符优先分析法LR分析法 4.1 语法分析程序的功能1. 自上而下的分析法从文法的开始符号出发,根据文法规则正向推导出给定句子的一种方法;或者说,从树根开始,往下构造语法树,直到建立每个叶的分…...

    2024/4/23 15:29:09
  3. “太空发布”后,你知道星环科技推出的“联邦云”是个啥吗?

    原文链接:https://www.qbitai.com/2020/05/14537.html充满时尚科技感的太空服神秘高端炫酷的飞船驾驶舱时不时跳出镜头并光亮闪闪的魔力球……处于如此星际迷航般的现场,本次疫情之下的星环科技新品发布着实有一种遨游太空的既视感;当然搭乘飞船发布的“联邦云”新特性也实实…...

    2024/4/23 15:29:01
  4. IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解)

    因为觉得网络上的 idea 快捷键不够详尽,所以特别编写了此篇文章,方便大家使用 idea O(∩_∩)O~ 其中的英文说明来自于 idea 的官网资料,中文说明主要来自于自己的领会和理解,英文说明只是作为参考。重要的快捷键会附带图示,进行详细的说明。 每一部分会先列出所有的快捷键…...

    2024/4/23 15:29:01
  5. Mathtype中丢失Mplugin.dll的问题

    将软件卸载,安装在C盘解决...

    2024/5/1 22:34:36
  6. 【深度学习入门】基于PaddleX的驾驶员状态识别和Paddle-Lite部署

    基于PaddleX的驾驶员状态识别和Paddle-Lite部署项目简介:目录:一、PaddleX 工具简介:二、数据集简介:三、定义数据加载器:四、定义并训练模型:MobileNet简介:DW Conv:PW Conv:(一)论文地址:(二)核心思想:(三)Platform-Aware NAS for Block-wise Search:3.1 M…...

    2024/5/1 23:38:05
  7. 长篇自动驾驶技术综述论文(上)

    长篇自动驾驶技术综述论文(上) A Survey of Autonomous Driving: Common Practices and Emerging Technologies Ekim Yurtsever, Jacob Lambert, Alexander Carballo, Kazuya Takeda 论文链接:https://arxiv.org/abs/1906.05113 摘要 自动驾驶系统(ADSs)承诺提供安全、舒适…...

    2024/4/23 15:29:05
  8. 字节跳动空降COO, Kevin Mayer什么来路?

    美国时间周一,我所在的硅谷科技圈,被一条消息刷屏了。迪士尼的高管Kevin Mayer,加入字节跳动,担任TikTok CEO,兼任字节跳动COO,直接向张一鸣汇报。有意思的是,这哥们长的实在太像《玩具总动员》的巴斯光年了,而且入职时间又选择了6月1号。于是,这动画公司资历,二次元…...

    2024/4/23 14:42:34
  9. 地学计算方法/地统计学(第三章区域化变量理论)

    3第三章 区域化变量理论 3.1区域化变量的概念与性质 地统计学是以区域化变量理论为基础的 谁能说说与随便变量相比,区域化变量的特色? -与位置相关 -既有随机性又有结构性 -不能重复取值 -样本之间存在空间相关性 区域化变量是定义在随机场的概念之上的 3.1.1随机场 随机变量…...

    2024/4/23 15:28:55
  10. 搭建LNMP,一篇文章足矣!

    文章目录0.LNMP1.Nginx1.1 安装步骤第一步:安装依赖包第二步:创建nginx用户第三步:安装nginx1.2 nginx常见命令1.2.1 启动nginx服务1.2.2 停止nginx服务1.2.3 重新加载配置文件1.2.4 小技巧1.3 nginx配置文件解析2.安装MariaDB和PHP解释器3.配置nginx4.配置MariaDB5.连接Mar…...

    2024/4/23 15:28:55
  11. Vue父子组件生命周期执行顺序及钩子函数的个人理解

    Vue父子组件生命周期执行顺序及钩子函数的个人理解先附一张官网上的vue实例的生命周期图,每个Vue实例在被创建的时候都需要经过一系列的初始化过程,例如需要设置数据监听,编译模板,将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命周期钩子的…...

    2024/5/1 21:43:44
  12. 阿里Java P系列技术要求(P5-P7)

    阿里p系列薪资(最新数据比这个高1倍左右) 阿里P5(高级研发工程师) 工作要求: 能独立完成日常工作,并能够对一些方案提出自己的建议。 基本考核就是能上手独立完成工作,熟练掌握。 技能要求(熟练): 1、程序设计和开发。 2、工作中需用到的Java开发的技术点以及…...

    2024/4/23 15:28:53
  13. Linux基础知识(15): Shell编程——变量

    文章目录1 变量概述2 变量的分类3 用户自定义变量3.1 变量定义3.2 变量调用3.3 变量叠加3.4 变量查看3.5 变量删除4 环境变量5 语系变量6 位置参数变量7 预定义变量8 接收键盘输入——read命令例1 使用参数-p例2 使用参数-s例3 使用参数-n参考资料注:转载请标明原文出处链接:…...

    2024/5/1 22:58:01
  14. DataGrip使用入门

    DataGrip使用入门-安装及数据源管理(一)DataGrip使用入门-常用设置(二)DataGrip使用入门-常用操作(三)DataGrip使用入门-导出数据(四)...

    2024/4/23 5:26:04
  15. 艾永亮:辨别真伪需求,紧跟用户场景化需求,才能打造出超级产品

    如何辨别真伪需求?我将从一个案例说起,分享在一个场景中,产品经理该如何辨别真伪需求来打造超级产品。 01 超级产品是通过系统为用户服务,以用户需求为中心、因此,满足用户需求很重要。其实,找到需求并不难,但找对需求却很难。 如何洞察用户需求? 用户需求往往并不全面…...

    2024/4/15 7:59:34
  16. Android知识体系总结之职业规划部分:Android底层开发工程师

    C/C++基础 JNI & NDK 图片开发OpenCv 视频开发FFmpeg1.C/C++基础 推荐书籍C++ Primer Plus视频教程黑马C/C++视频教程2. JNI & MDK 视频教程 3.图片开发之OpenCv 视频教程 4.视频开发之FFmpeg 视频教程...

    2024/4/17 2:42:42
  17. javascript引擎属于单线程

    javascript引擎属于单线程,但可以模拟多线程。 通过一个叫轮转时间轮转片模拟多线程。 短时间之内轮滚执行多个任务的片段。 1、任务1 任务2 2、切分任务1 任务2 3,随机排列这些任务片段,组成队列。 4、按照这个队列顺序将任务片段送进JS进程 5、JS线程执行一个又一个的任务…...

    2024/5/1 22:21:57
  18. java程序员技术树(学不会就是老师不够牛皮)

    java基础 毕向东天下第一: springBoot 雷锋杨天下第一: mybatisPlus 官网:...

    2024/4/17 2:43:00
  19. 前端组件化思维与技巧教程分享

    分享给大家,csdn不方便发链接,需要的小伙伴可以扫码领取。...

    2024/4/17 2:44:06
  20. vue router全面详细知识点

    文章目录认识路由什么是路由后断路由前端路由前端路由的规则url的hashHTML5的history模式vue router基础什么是vue router安装和使用如何创建一个router实例挂载到vue实例中具体使用router创建实例的过程细节处理路由的默认路径设置HTML5的history模式详解router-link如和修改l…...

    2024/4/18 2:12:55

最新文章

  1. python实现的基于单向循环链表插入排序

    相比于定义一个循环双向链表来实现插入排序来说&#xff0c;下面的实现采用一个单向循环链表来实现&#xff0c;并且不需要定义一个单向循环链表类&#xff0c;而是把一个list&#xff08;数组/顺序表&#xff09;当成单向循环链表来用&#xff0c;list的元素是一个包含两个元素…...

    2024/5/1 23:46:36
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. uniApp使用textarea,默认高度且文字多后自适应设置

    需求是有一个默认高度且文字溢出时需要自适应高度 代码如下 <textarea model:value"{{text}}" auto-height placeholder"请输入内容" maxlength"-1" />textarea {border: 1px solid rgb(201, 201, 201); // 边框padding: 15rpx; // 内边…...

    2024/4/14 18:22:48
  4. 零基础 HTML 入门(详细)

    目录 1.简介 1.1 HTML是什么? 1.2 HTML 版本 1.3 通用声明 2.HTML 编辑器 3.标签的语法 4.HTML属性 5.常用标签 5.1 head 元素 5.1.1 title 标签 5.1.2 base 标签 5.1.3 link 标签 5.1.4 style 标签 5.1.5 meta 标签 5.1.6 script 5.2 HTML 注释 5.3 段落标签…...

    2024/5/1 13:12:05
  5. 游戏引擎架构01__引擎架构图

    根据游戏引擎架构预设的引擎架构来构建运行时引擎架构 ​...

    2024/5/1 13:06:15
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57