×

ribbon负载均衡策略 pring loud

看Spring-cloud怎样使用Ribbon?微服务框架 spring cloud 和 dubbo 有什么区别

admin admin 发表于2022-07-05 15:36:42 浏览84 评论0

抢沙发发表评论

看Spring-cloud怎样使用Ribbon


使用Spring Cloud构建实际的微服务架构。
  基本概念:
  使用Docker进行集成测试
  混合持久化
  微服务架构
  服务发现
  API网关
  Docker
  使用Docker对每一个服务进行构建和部署。使用Docker Compose在一个开发机上进行端到端的集成测试。
  混合持久化
  混合持久化其实就是说使用多种数据库来存储。不同的微服务实例都会使用它们自己的数据库,并通过REST服务或者消息总线来通信,举个例子,你可以使用基于以下数据库来构建微服务:
  Neo4j(图形化)
  MongoDB(文档化)
  MySQL(关联)
  微服务架构
  这个例子演示了如何使用微服务创建一个新的应用。由于在项目中的每一个微服务只有一个单一的父项目。开发者为此得到的收益是可以在本机上运行和开发每一个微服务。添加一个新的微服务非常简单,当发现微服务时将会自动发现运行时的集群环境上。
  Service Discovery
  项目中包含两个发现服务,一个在Netflix Eureka,另一个使用了
  Consul from Hashicorp。多种发现服务提供了多种选择,一个是使用(Consul)来做DNS服务集群,另一个是(Consul)基于代理的API 网关。
  API 网关
  每一个微服务都关联Eureka,在整个集群中检索API路由。使用这个策略,每一个在集群上运行的微服务只需要通过一个共同的API网关进行负载均衡和暴露接口,每一个服务也会自动发现并将路由请求转发到自己的路由服务中。这个代理技术有助于开发用户界面,作为平台完整的 API通过自己的主机映射为代理服务。
  Docker 实例
  下面的实例将会通过Maven来构建,使用Docker为每一个微服务构建容器镜像。我们可以很优雅的使用Docker Compose在我们自己的主机上搭建全部的微服务集群。
  开始构建
  在这之前,请先移步至项目的GitHub 仓库。
  

微服务框架 spring cloud 和 dubbo 有什么区别


dubbo由于是二进制的传输,占用带宽会少,springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大
dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决
springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级
dubbo的注册中心可以选择zk,redis等多种,springcloud的注册中心只能用eureka或者自研

Spring MVC 配置文件讲解


使用@Controller定义一个控制器
使用@RequestMapping映射请求
使用@RequestParam绑定请求参数到方法参数
使用@ModelAttribute提供一个从模型到数据的链接
使用@SessionAttributes指定存储在会话中的属性

《context:annotation-config/》
他的作用是隐式地向 Spring 容器注册
AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、
PersistenceAnnotationBeanPostProcessor、
RequiredAnnotationBeanPostProcessor
这 4 个BeanPostProcessor。
例如:
如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。
如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。
如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下:
《bean class=“org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor “/》
如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。同样,传统的声明方式如下:
《bean class=“org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor“/》
记得,使用注解一般都会配置扫描包路径选项
《context:component-scan base-package=”XX.XX”/》

《servlet》
《servlet-name》dispatcherServlet《/servlet-name》
《servlet-class》org.springframework.web.servlet.DispatcherServlet《/servlet-class》
《init-param》
《param-name》contextConfigLocation《/param-name》
《param-value》/WEB-INF/dispatcherServlet-servlet.xml《/param-value》
《/init-param》
《load-on-startup》1《/load-on-startup》
《/servlet》
《servlet-mapping》
《servlet-name》dispatcherServlet《/servlet-name》
《url-pattern》*.do《/url-pattern》
《/servlet-mapping》
这个配置常常见于web.xml文件中
《load-on-startup》1《/load-on-startup》是启动顺序,让这个Servlet随Servletp容器一起启动。
《url-pattern》*.do《/url-pattern》 会拦截*.do结尾的请求。

《servlet-name》dispatcherServlet《/servlet-name》这个Servlet的名字是dispatcherServlet,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中,关于key,以后说明。

在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[dispatcherServlet]-servlet.xml 的配置文件,生成文件中定义的bean。

《init-param》
《param-name》contextConfigLocation《/param-name》
《param-value》/WEB-INF/dispatcherServlet-servlet.xml《/param-value》
《/init-param》

指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件。
其中《param-value》**.xml《/param-value》 这里可以使用多种写法
1、不写,使用默认值:/WEB-INF/《servlet-name》-servlet.xml
2、《param-value》/WEB-INF/classes/springMVC.xml《/param-value》
3、《param-value》classpath*:springMVC-mvc.xml《/param-value》
4、多个值用逗号分隔

springMVC-mvc.xml 配置文件片段讲解

《context:annotation-config/》
《!-- 自动扫描的包名 --》
《context:component-scan base-package=“com.iflysse“/》
《!-- 默认的注解映射的支持 --》
《mvc:annotation-driven/》

《!-- 视图解释类 --》
《bean class=“org.springframework.web.servlet.view.InternalResourceViewResolver“》
《property name=“prefix“ value=“/WEB-INF/jsp/“/》
《property name=“suffix“ value=“.jsp“/》《!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 --》
《property name=“viewClass“ value=“org.springframework.web.servlet.view.JstlView“ /》
《/bean》

《mvc:annotation-driven /》 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。《mvc:annotation-driven /》 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
后面,我们处理响应ajax请求时,就使用到了对json的支持。
后面,对action写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是《mvc:annotation-driven /》这一句注册的这两个bean。

《!-- json 支持 --》
《bean id=“mappingJacksonHttpMessageConverter“
class=“org.springframework.http.converter.json.MappingJacksonHttpMessageConverter“》
《property name=“objectMapper“ ref=“commonObjectMapper“/》
《property name=“supportedMediaTypes“》
《list》
《value》text/html;charset=UTF-8《/value》
《/list》
《/property》
《/bean》

《!-- ObjectMapper json转换 --》
《bean id=“commonObjectMapper“ class=“cn.com.starit.util.CommonObjectMapper“/》
-loud