范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringCloud入门看这一篇就够了

  SpringCloud微服务架构演进单体架构 垂直拆分 分布式SOA面向服务架构 微服务架构 服务调用方式:RPC,早期的webservice,现在热门的dubbo,都是RPC的典型代表 HTTP,HttpClient,OKHttp,URLConnection,RestTemplate Euraka服务注册中心注册中心添加依赖  	org.springframework.cloud 	spring-cloud-starter-netflix-eureka-client       org.springframework.cloud     spring-cloud-starter-netflix-eureka-server  使用 @EnableEurekaServer 注解开启注册服务 @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication {     public static void main(String[] args) {         SpringApplication.run(EurekaServerApplication.class, args);     } } 编写配置文件application.yml server:   port: 8761 eureka:   instance:     hostname: localhost   client:     registerWithEureka: false     fetchRegistry: false     serviceUrl:       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/     #是否将自己注册到Eureka服务中,默认为true(由于当前就是eureka服务,固设置为false)     registerWithEureka: false      #设置是否从eureka服务上获取注册信息,默认为true(由于当前就是eureka服务,固设置为false)     fetchRegistry: false   server:       # 是否开启自我保护模式(自我保护模式,当eureka在一定时间内没有接受到某个微服务实例的心跳包,默认90S会注销该实例),       # 一旦进入自我保护模式,若短时间内丢失大量客户端,eureka也会保护注册表的信息,不再注销       enable-self-preservation: false       # 清理间隔。默认为60000ms       eviction-interval-timer-in-ms: 5000 服务提供者(服务注册)添加依赖         org.springframework.cloud      spring-cloud-starter-netflix-eureka-client    	org.springframework.cloud 	spring-cloud-starter-consul-discovery     	org.springframework.boot 	spring-boot-starter-actuator  通过@EnableDiscoveryClient注解开启对服务发现的支持 编写配置文件application.yml spring:   application:     name: consul-provider   ####consul注册中心地址   cloud:     consul:       host: localhost       port: 8500       discovery:         service-name: ${spring.application.name} #注册中心名字与spring的应用名称一致         #-----------------------------相关配置----------------------------|         #是否注册         register: true         #实例ID         instance-id: ${spring.application.name}-1         #服务实例名称         service-name: ${spring.application.name}         #服务实例端口         port: ${server.port}         #健康检查路径         healthCheckPath: /actuator/health         #健康检查时间间隔         healthCheckInterval: 15s         #开启ip地址注册         prefer-ip-address: true         #实例的请求ip         ip-address: ${spring.cloud.client.ip-address}
  服务消费者 pom.xml添加依赖  	org.springframework.cloud 	spring-cloud-starter-consul-discovery  编写配置文件application.yml spring:   application:     name: consul-provider   ####consul注册中心地址   cloud:     consul:       host: localhost       port: 8500       discovery:         #设置不需要注册到Consul中         register: false 负载均衡Ribbon
  Ribbon是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。Ribbon自动的从注册中心中获取服务提供者的
  列表信息,并基于内置的负载均衡算法,请求服务。 搭建过程启动两个服务实例
  先编写请求的接口 @Value("${spring.cloud.client.ip-address}") private String ip; @Value("${server.port}") private String port; @ResponseBody @RequestMapping(value = "backInfo", method = RequestMethod.GET) public String backInfo() { 	return "调用的是" + ip + "端口是:" + port; }
  我们假设搭建两台服务提供者,端口分别为:8090和8091,将已有服务的配置更改为 server:  	#的${}表示在jvm启动时候若能找到对应port则使用,若无则使用后面的默认值 	port: ${port:8090}
  另外一台在启动的时候可以指定端口port,在如下界面中的 VM options 中设置 -Dport=10087
  启动负载均衡
  因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改 消费者 的启动类 @Bean @LoadBalanced public RestTemplate restTemplate() { 	return new RestTemplate(); } 调取服务提供者接口,页面进行测试,可以分别请求到8090和8091两个端口 @Autowired private RestTemplate restTemplate; @ResponseBody @RequestMapping(value = "getIpAndPort", method = RequestMethod.GET) public String printInfo() { 	String url = "http://springbootdemo/backInfo"; 	return restTemplate.getForObject(url, String.class); } 负载均衡策略
  Ribbon默认的负载均衡策略是轮询,Ribbon内置了多种负载均衡策略
  修改负载均衡规则的配置: springbootdemo:   ribbon:      NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule     #格式是: {服务名称}.ribbon.NFLoadBalancerRuleClassName com.netflix.loadbalancer.RoundRobinRule :以轮询的方式进行负载均衡。 com.netflix.loadbalancer.RandomRule :随机策略 com.netflix.loadbalancer.RetryRule :重试策略 com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略 com.netflix.loadbalancer.BestAvailableRule :最佳策略 com.netflix.loadbalancer.AvailabilityFilteringRule :可用过滤策略
  策略选择: 如果每个机器配置一样,则建议不修改策略 (推荐) 如果部分机器配置强,则可以改为 WeightedResponseTimeRule 源码跟踪
  RibbonAutoConfifiguration->LoadBalancerAutoConfiguration->LoadBalancerInterceptor 服务调用Feign
  Feign是一种声明式、模板化的HTTP客户端。 基于Feign的服务调用
  1.在消费者引入依赖   org.springframework.cloud  spring-cloud-starter-openfeign 
  2.启动类开启feign支持 @SpringBootApplication @EnableDiscoveryClient @ComponentScan(basePackages = "com.jyd0124.consume_server.*") @EnableFeignClients public class ConsumeServerApplication {      public static void main(String[] args) {         SpringApplication.run(ConsumeServerApplication.class, args);     }      @Bean     @LoadBalanced     public RestTemplate returnBean() {         return new RestTemplate();     } }
  3.创建接口和定义需要远程调用的方法 @FeignClient("springbootdemo") public interface SpringBootFeign {      @RequestMapping(value = "/person", method = RequestMethod.GET)     public Map getPerson(@RequestParam(value = "id") int id);  }
  4.调用服务。 @Autowired private SpringBootFeign springBootFeign;      @ResponseBody @RequestMapping(value = "/person/{id}", method = RequestMethod.GET) public Map printInfo(@PathVariable("id") int id) { 	return springBootFeign.getPerson(id); }
  5.访问,测试结果
  负载均衡
  Feign中本身已经集成了Ribbon依赖和自动配置,因此我们不需要额外引入依赖,也不需要再注册RestTemplate 对象,可以通过 ribbon.xx 来进行全局配置。也可以通过  服务名.ribbon.xx  来对指定服务配置。 Feign的配置feign:   client:     config:       feignName: ##定义FeginClient的名称         connectTimeout: 5000 # 建立链接的超时时长         readTimeout: 5000 # 读取超时时长         # 配置Feign的日志级别,相当于代码配置方式中的Logger         loggerLevel: full         # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder         errorDecoder: com.example.SimpleErrorDecoder         # 配置重试,相当于代码配置方式中的Retryer         retryer: com.example.SimpleRetryer         # 配置拦截器,相当于代码配置方式中的         RequestInterceptor requestInterceptors:           - com.example.FooRequestInterceptor           - com.example.BarRequestInterceptor         #配置熔断不处理404异常         decode404: false
  请求压缩: 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗 #请求压缩 feign:   compression:     request:       enabled: true # 开启请求压缩     response:       enabled: true # 开启响应压缩 Hystrix支持
  Feign默认也有对Hystrix的集成 feign:  	hystrix:  		enabled: true # 开启Feign的熔断功能 日志级别
  默认情况下Feign的日志是没有开启的。 feign:   client:     config:       feignName:         loggerLevel: full         #NONE【性能最佳,适用于生产】:不记录任何日志(默认值)         #BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间         #HEADERS:记录BASIC级别的基础上,记录请求和响应的header。         #FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据 熔断器Hystrix雪崩效应
  在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的"雪崩"效应。 Hystrix的特性服务熔断
  Hystrix的熔断状态机模型:
  hystrix:   command:     default:       execution.isolation.thread.timeoutInMilliseconds: 2000       circuitBreaker:         errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%         sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒         requestVolumeThreshold: 10 # 触发熔断的最小请求次数,默认20                  #配置项可以参考 HystrixCommandProperties 类 服务降级 通过HystrixdeCommand的fallback实现服务降级。 服务隔离
  -线程池隔离策略
  - 信号量隔离策略 Ribbon中使用断路器在pom.xml中添加依赖      org.springframework.cloud     spring-cloud-starter-hystrix  在启动类上添加注解开启Hystrix @SpringBootApplication @EnableDiscoveryClient @EnableHystrix public class ConsumeServerApplication {      public static void main(String[] args) {         SpringApplication.run(ConsumeServerApplication.class, args);     }      @Bean     @LoadBalanced     public RestTemplate returnBean() {         return new RestTemplate();     } } 编写熔断降级逻辑。在方法上加上@HystrixCommand注解,并指定了fallbackMethod熔断方法 @ResponseBody @RequestMapping(value = "/info", method = RequestMethod.GET) @HystrixCommand(fallbackMethod = "backErrorInfo") public String printInfo() {     String url = "http://springbootdemo/backInfo";     return restTemplate.getForObject(url, String.class); } public String backErrorInfo(){     return "sorry,error"; } 测试,如果springbootdemo服务关闭,会发现页面返回了降级处理信息
  Feign中使用断路器
  SpringCloud Fegin默认已为Feign整合了hystrix 添加配置 feign:  	hystrix:  		enabled: true # 开启Feign的熔断功能 配置FeignClient接口的实现类,并通过@Component注入到Ioc容器中 @Component public class HystrixMethod implements SpringBootFeign {     @Override     public Map getPerson(int id) {         Map map = new HashMap<>();         map.put("code", 500);         map.put("msg", "sorry,error");         return map;     } } 在@FeignClient注解中添加降级方法 @FeignClient(name = "springbootdemo", fallback = HystrixMethod.class) public interface SpringBootFeign {      @RequestMapping(value = "/person", method = RequestMethod.GET)     public Map getPerson(@RequestParam(value = "id") int id);  } 关闭 springbootdemo 服务,访问测试
  Hystrix Dashboard添加依赖  	org.springframework.boot 	spring-boot-starter-actuator    	org.springframework.cloud 	spring-cloud-starter-hystrix-dashboard  在启动类使用@EnableHystrixDashboard注解激活仪表盘 @SpringBootApplication @EnableDiscoveryClient @EnableHystrix @EnableHystrixDashboard public class ConsumeServerApplication {      public static void main(String[] args) {         SpringApplication.run(ConsumeServerApplication.class, args);     }      @Bean     @LoadBalanced     public RestTemplate returnBean() {         return new RestTemplate();     } } 访问页面
  遇到问题:https://blog.csdn.net/ghyghost/article/details/108053206
  断路器聚合监控Turbine,Turbine是一个聚合Hystrix 监控数据的工具。 网关Gateway介绍
  Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflflix ZUUL,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。 快速入门创建gateway-server模块,引入依赖  	org.springframework.cloud 	spring-cloud-starter-gateway    	org.springframework.cloud 	spring-cloud-starter-netflix-eureka-client  编写启动类 @SpringBootApplication @EnableDiscoveryClient public class GatewayServerApplication {      public static void main(String[] args) {         SpringApplication.run(GatewayServerApplication.class, args);     }  } 编写路由规则 server:   port: 8765 spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       #由一个ID、一个目的URL、一组断言工厂、一组Filter组成       routes:           # 路由id,可以随意写         - id: consume-server-route           # 代理的服务地址           uri: http://127.0.0.1:8081           # 路由断言,可以配置映射路径           predicates:             - Path=/person/** eureka:   client:     # 集群url     service-url:       defaultZone: http://127.0.0.1:8761/eureka   instance:     prefer-ip-address: true #使用ip注册     ip-address: 127.0.0.1     instance-id: ${spring.cloud.client.ip-address}:${server.port} 启动测试
  路由添加前缀PrefixPath spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       #由一个ID、一个目的URL、一组断言工厂、一组Filter组成       routes:           # 路由id,可以随意写         - id: consume-server-route           # 代理的服务地址           uri: http://127.0.0.1:8081           # 路由断言,可以配置映射路径           predicates:             - Path=/**           filters:            	# 添加请求路径的前缀            	- PrefixPath=/person
  相当于PrefixPath=/personhttp://localhost:8765/180868 --》http://localhost:8765/person/180868 --》http://localhost:8081/person/180868 去除前缀StripPrefifix spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       #由一个ID、一个目的URL、一组断言工厂、一组Filter组成       routes:           # 路由id,可以随意写         - id: consume-server-route           # 代理的服务地址           uri: http://127.0.0.1:8081           # 路由断言,可以配置映射路径           predicates:             - Path=/api/person/**           filters:            	# 表示过滤1个路径,2表示两个路径,以此类推           	- StripPrefix=1
  StripPrefix=1 http://localhost:8765/api/person/180868--》http://localhost:8765/person/180868--》http://localhost:8081/person/180868 动态路由
  uri以 lb: //开头(lb代表从注册中心获取服务),后面接的就是你需要转发到的服务名称 spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       routes:           # 路由id,可以随意写         - id: consume-server-route           # 代理的服务地址           uri: lb://springbootdemo           # 路由断言,可以配置映射路径           predicates:             - Path=/person/** 重写转发路径
  路由转发是直接将匹配的路由path直接拼接到映射路径(URI)之后,那么往往没有那么便利。修改application.yaml spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       routes:           # 路由id,可以随意写         - id: consume-server-route           # 代理的服务地址           uri: lb://springbootdemo           # 路由断言,可以配置映射路径           predicates:             - Path=/springbootdemo/**           filters:           	- RewritePath=/springbootdemo/(?.*), /${segment}
  请求http://localhost:8765/springbootdemo/person/180868 --》http://localhost:8765/person/180868--》http://localhost:8081/person/180868( 值得注意的是在yml文档中 $ 要写成 $ ) 基于服务发现的路由规则 spring:   application:     # 注册到eureka上的应用名称     name: gateway_server   cloud:     gateway:       discovery:         locator:           #设置路由访问方式:http://Gateway_HOST:Gateway_PORT/大写的serviceId/**,其中微服务应用名默认大写访问。           enabled: true           # 该设置可以将服务名改成小写(默认为大写)           lower-case-service-id: true
  这样,就可以通过http://localhost:8765/springbootdemo/person?id=180868访问 过滤器生命周期 pre:: 这种过滤器在请求被路由之前调用。 post : 这种过滤器在路由到微服务以后执行。 过滤器类型 局部过滤器(GatewayFilter),应用到单个路由或者一个分组的路由上,通过 spring.cloud.gateway.routes.filters 配置在具体路由下,只作用在当前路由上; 全部过滤器(GlobalFilter),应用到所有的路由上,实现 GlobalFilter 接口即可 常见过滤器
  过滤器名称
  说明
  AddRequestHeader
  对匹配上的请求加上Header
  AddRequestParameters
  对匹配上的请求路由添加参数
  AddResponseHeader
  对从网关返回的响应添加Header
  StripPrefifix
  对匹配上的请求路径去除前缀
  配置全局默认过滤器 spring:   cloud:     gateway:       default-filters:       	- AddResponseHeader=X-Response-Default-MyName, jyd0124
  其他过滤器具体可参考GatewayFilterFactory类 自定义过滤器 需求:模拟一个登录的校验。基本逻辑:如果请求中有token参数,则认为请求有效,放行。 @Component public class TokenFilter implements GlobalFilter, Ordered {     private final Logger logger = LoggerFactory.getLogger(TokenFilter.class);      @Override     public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {         //request,response都可以通过 ServerWebExchange 获取         String token = exchange.getRequest().getQueryParams().getFirst("token");         if (StringUtils.isBlank(token)) {             logger.info("token is empty ...");             exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);             return exchange.getResponse().setComplete();         }         //chain.filter 继续向下游执行         return chain.filter(exchange);     }      @Override     public int getOrder() {         //过滤器的优先级,返回值越大级别越低         return 0;     } } 跨域问题@Configuration public class GwCorsFilter {      /**      *  以下CorsWebFilter跨域处理也可以通过配置文件进行处理      * spring:      *   cloud:      *     gateway:      *       globalcors:      *         cors-configurations:      */     @Bean     public CorsWebFilter corsFilter() {         CorsConfiguration config = new CorsConfiguration();          config.setAllowCredentials(true); // 允许cookies跨域         config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin         config.addAllowedHeader("*");// #允许访问的头信息,*表示全部         config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了         config.addAllowedMethod("OPTIONS");// 允许提交请求的方法类型,*表示全部允许         config.addAllowedMethod("HEAD");         config.addAllowedMethod("GET");         config.addAllowedMethod("PUT");         config.addAllowedMethod("POST");         config.addAllowedMethod("DELETE");         config.addAllowedMethod("PATCH");          UrlBasedCorsConfigurationSource source =                 new  UrlBasedCorsConfigurationSource(new PathPatternParser());         source.registerCorsConfiguration("/**", config);          return new CorsWebFilter(source);     }      /**      *      *如果使用了注册中心(如:Eureka),进行控制则需要增加如下配置      */     @Bean     public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient) {         return new DiscoveryClientRouteDefinitionLocator(discoveryClient,new DiscoveryLocatorProperties());     }      /**      * 以下是springboot2.0.5出现only one connection 的解决办法      * @return      */     @Bean     public HiddenHttpMethodFilter hiddenHttpMethodFilter() {         return new HiddenHttpMethodFilter() {             @Override             public Mono filter(ServerWebExchange exchange, WebFilterChain chain) {                 return chain.filter(exchange);             }         };     } } 负载均衡和熔断
  Gateway中默认已经集成了Ribbon负载均衡和Hystrix熔断机制。但是所有的策略都是走的默认值,建议根据Ribbon和Hystrix手动进行配置。 网关限流计数器限流算法 漏桶算法 令牌桶算法 基于Filter的限流 基于Sentinel的限流 SpringCloud Config配置中心在gitee上创建远程配置文件
  构建config配置中心服务构建Config-server服务,添加依赖  	org.springframework.cloud 	spring-cloud-config-server   	org.springframework.cloud 	spring-cloud-starter-netflix-eureka-client  在config-server的启动类添加@EnableConfigServer @SpringBootApplication @EnableDiscoveryClient @EnableConfigServer public class ConfigServerApplication {      public static void main(String[] args) {         SpringApplication.run(ConfigServerApplication.class, args);     }  } 编写config-server配置文件 server:   port: 8888 spring:   application:     name: config_server   cloud:     config:       server:         git:           #配置文件所在的git仓库           uri: https://gitee.com/jyd0124/springcloudconfig.git           #配置文件分支           default-label: master           #配置文件所在根目录           search-paths: config           #如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写           username: xxx           password: xxx eureka:   client:     service-url:       defaultZone: http://127.0.0.1:8761/eureka #服务注册地址 可通过http://localhost:8888/consume-server.yml测试是否成功 获取配置中心配置改造其他随便一个服务,比如我使用我自己的consume_server,添加依赖  	org.springframework.cloud 	spring-cloud-starter-config   	org.springframework.cloud 	spring-cloud-starter-netflix-eureka-client  修改配置
  删除consume_server的application.yml 文件(因为该文件从配置中心获取)
  创建consume_server 的bootstrap.yml 配置文件,其内容如下 spring:   cloud:     config:       name: consume-server       # 远程仓库中的版本保持一致       label: master       #profile: dev       #通过ip直接访问配置中心       #uri: http://localhost:8888/       #通过eurka访问配置中心       discovery:         #配置中心服务         service-id: config-server         enabled: true  eureka:   client:     service-url:       defaultZone: http://127.0.0.1:8761/eureka #服务注册地址
  3.启动consume_server项目发现获取到配置文件将服务暴露在8081端口,测试接口可成功返回数据
  补充:bootstrap.yml文件也是Spring Boot的默认配置文件,而且其加载的时间相比于application.yml更早。bootstrap.yml文件相当于项目启动时的引导文件,内容相对固定。application.yml文件是微服务的一些常规配置参数,变化比较频繁。 Spring Cloud Bus服务总线问题:
  前面已经完成了将微服务中的配置文件集中存储在远程Git仓库,如果我们更新Git仓库中的配置文件,那用户微服务是否可以及时接收到新的配置信息并更新呢?经过测试,对于Git仓库中配置文件的修改并没有及时更新到用户微服务,只有重启用户微服务才能生效。如果想在不重启微服务的情况下更新配置该如何实现呢? 可以使用Spring Cloud Bus来实现配置的自动更新。 介绍
  Spring Cloud Bus是用轻量的消息代理将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。也就是消息总线可以为微服务做监控,也可以实现应用程序之间相互通信。 Spring Cloud Bus可选的消息代理有两种:RabbitMQ和Kafka。
  具体实现可参考:https://www.fangzhipeng.com/springcloud/2018/08/08/sc-f8-bus.html
  https://www.cnblogs.com/babycomeon/p/11141160.html Spring Cloud体系技术综合应用概览
  来源:https://www.cnblogs.com/jyd0124/p/springcloud.html

泾川文汇对北京国安的几点思考泾川文汇淘汰北京国安的视频大家看了吗?有几点想法不吐不快。一大家都喜欢看爽文,草根逆袭我们狂欢。细想下来就会明白,所有的一战成名,皆源于厚积薄发。我们只看到了他们在赛场上的辉煌,却2100万,告别勇士!被科尔彻底弃用,承认吧,你已经足够幸运了7胜9负,作为卫冕冠军,勇士的开局,让所有人都感到意外,仅仅只是损失了几名角色球员,没有人能想到,勇士会遭受如此巨大的影响。在赛季开始之前,大部分的勇士球迷都是乐观的。他们畅想着核玉溪玉昆钢铁夺得2022中冠联赛冠军云南足球重回职业联赛11月20日晚,在2022年卡塔尔世界杯开幕之前,2022中冠联赛总决赛落下帷幕。在最后的冠亚军争夺战的比赛中,云南玉溪玉昆钢铁队与重庆铜梁龙在两回合战平,在点球大战42战胜对手,按乔尔杰维奇思路,这12人能否入选男篮世界杯奥运会名单?昨天,中国男篮新主帅乔尔杰维奇乘抵达中国,随着新帅的走马上任,新一轮男篮国家队队员人选也逐渐浮出水面。这也意味着中国男篮的新篇章开始了。带着全国人民的期待,他们必须全力以赴,去跟各交易截至前,等待达成的5笔交易,浓眉去老鹰,杜兰特加盟尼克斯NBA激战正酣,目前联盟多数球队完成了15轮的较量,对于一些球队来说,常规赛前20场比赛被誉为一个时间节点,这个时期多数球队都会暴露出存在的弊端和不足,同时伴随交易截止日的来临,一张继科开百万豪车!母亲指导做饭,父亲催婚,儿媳需满足四点要求乒乓球在我国被誉为国球,在大街小巷均会出现乒乓球桌台,年幼老少在乒乓球桌旁挥洒汗水,一方面锻炼了身体,另一方面培养了个人身心,而良好的群众基础涌现出多位世界冠军,今天提到的这位乒乓世界杯历史上东道主首战从未输球,卡塔尔队表现将如何?11月19日,卡塔尔队西班牙籍主教练桑切斯在赛前新闻发布会上。新华社记者潘昱龙摄卡塔尔队主教练桑切斯或许对手认为已经赢定了东道主卡塔尔队与厄瓜多尔队之间的2022年世界杯揭幕战将在不讲究吃穿,也不喜欢化妆打扮的,往往是这三种女人图源自网络侵权请联系删除俗话说,女为悦己者容。在很多人看来,女人对于外表,还是很讲究的。因为女人本身就比较细腻敏感,所以她们对于生活品质的要求,也会更高。女人相较于男人,对于吃穿打儿子点名要吃的卷子,有营养还省事,3口1个吃得可香了天气一天比一天冷了,身体需要的热量大,稍微一活动就想吃点东西。早餐吃稀的已经满足不了家人的需求,所以我家每天早餐都会有面食出现,一次可以多做点,连着2天都省事了,饱腹感强,一上午都一斤几块钱的农村散酒,真的有利润吗?看完之后才明白套路这么深不同地方的人,喝的口粮酒也各有不同。像城市里多数人的口粮酒,一般都是牛二玻汾这种,而在农村,最受欢迎的一定是供销社里的散酒。之所以受欢迎,除了各种香型各种度数都有,买起来方便外,还中国四大名酒,为什么没有五粮液和剑南春?背后原因真让人心酸四大名酒,为何独独缺少五粮液和剑南春?难道背后另有缘由?原因让人心酸说起名酒,茅五剑是当之无愧的顶流,在酒友心中,这三者也关联不小,可为何在四大名酒中,茅台独占鳌头,五粮液和剑南春
秋冬宝宝睡觉怎么穿?正确穿衣避免着凉感冒很多新手妈妈不知道该如何给宝宝穿衣,尤其是睡眠中爱蹬被的宝宝很容易着凉感冒。那么,不同温度下该给宝宝怎么穿?穿睡袋里面是否需要穿衣物?今天带大家一篇搞懂!宝宝睡觉这样穿衣不感冒!如男孩起名,大气凌然,英姿飒爽的男宝宝名字大全字的结构好不好会影响到名字整体的美观,也会给人的视觉有着很大的不同,所以我们在给孩子起名的时候,除了要注意字的读音和含义外,也要留意字的结构,一些笔画数较多,结构过于复杂的字是不适老子诗情画意的女孩名字,个个都高端大气范十足关注吉生起名小程序,免费起名宝宝科学取名起名改名专业人工服务平台!(此处已添加小程序,请到今日头条客户端查看)名字是供人呼唤与辨别的,所以很多父母们在为自家的小孩起名时十分上心,而日本学者福岛核辐射物质回流日本进入北冰洋新华社北京11月11日电一名日本学者研究发现,在2011年福岛第一核电站核事故中泄漏的放射性物质流至美国西海岸后,部分已随洋流回到日本东北部沿海,且扩散至北冰洋。据共同社9日报道,NASA毅力号火星车对岩石进行粗加工窥视没有人见过的东西据CNET报道,美国宇航局(NASA)的毅力号火星车在分层岩石上工作后还发现了一个奇妙的三角形白色斑点。毅力号在杰泽罗陨石坑检查一个有趣的分层岩石。该漫游车使用其机械臂末端的研磨工冬天给孩子补锌,建议隔天给孩子蒸一盘它,锌含量极高营养好吃炳哥私厨美食原创图片文章,未经许可禁止搬运抄袭,违者必究!冬天给孩子补锌,建议隔天给孩子蒸一盘它,锌含量极高营养好吃!俗话说得好,身体是革命的本钱,特别是小孩子,身体还没有长成熟,冰岛五寨古树茶冰岛其实是一个行政村,位于云南省临沧地区双江勐库镇,地处勐库镇北边,距勐库镇政府所在地大25公里左右,辖地界糯伍坝歪南迫等五个村民小组。冰岛村除冰岛老寨以外的另外四个寨子也都有古树56岁阿姨每天做4件事,失眠慢慢好,精神饱满,她的方法值得借鉴睡眠是养精蓄锐,恢复体力的最佳方式,正常成年人每日至少保证78小时的睡眠时间,才能满足身体各器官各组织的能量所需,放松精神更快的完成第2天的工作和学习。如今很多人都有了熬夜的坏习惯你了解冠心病的八大禁忌吗?1。避免生气和生气。人体的中枢神经系统控制着一切。当人过度兴奋和紧张时,特别是喜出望外和悲伤时,中枢神经系统的应激反应会引起小动脉异常收缩,导致血压升高心跳加快心肌收缩增强,从而引每天坚持吃早饭,究竟有哪些好处?医生一次性说清楚早饭是一日三餐中必不可少的一餐,但大多数人都没有注意到早饭的重要性,很多人认为早饭可以吃也可以不吃,或者只吃几口填饱肚子就足够了。但其实,吃早饭是很重要的事情,如果每天坚持吃早饭不婴儿刷牙用米粒大的牙膏?究竟婴儿刷牙到底要不要用牙膏?这真是爸妈都会遇到的一个棘手问题虽然长辈常开玩笑说以前小孩只要随便养都会长大。但现代育儿资讯太方便且太多元,再加上来自多方关注的压力,要当个称职的父母