本篇实验dubbo的去中心化服务治理能力
dubbo介绍
服务治理开源项目,具备服务自动伸缩能力。当有部分dubbo服务实例不可用时,其通过注册中心(本实验是zookeeper注册中心),将不可用的服务在客户端调用层删除。
实验主机
localhostdubbo 服务实例
localhost casdemo web示例,允当dubbo服务消费者
localhost zookeeper实例
zookeeper启动
./zkServer.sh start
可以配置多个zookeeper实例
服务端
发布demoService.sayHello()服务
运行JAVA main函数
</pre></div><div>DubboProviderMain</div><div><pre name="code" class="java">package casdemo; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DubboProviderMain { /** * @Title main * @Description TODO * @Author weizhi2018 * @param args * @throws */ public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"remote-provider.xml"}); context.start(); System.out.println("Press any key to exit."); System.in.read(); } }
运行JAVA main函数
remote-provider.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="casdemo" /> <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234" />--> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:registry protocol="zookeeper" address="192.168.161.73:21818"/> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="casdemo.DemoService" ref="demoService" /> <!-- 和本地bean一样实现服务 --> <bean id="demoService" class="casdemo.DemoServiceImpl" /> </beans>
客户端
客户端为web工程
webconsumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--注册中心地址配置--> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:dubbo.properties</value> </list> </property> </bean> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <!-- 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。 --> <dubbo:application name="consumer-of-casdemo"/> <!-- 使用zookeeper注册中心暴露发现服务地址 --> <dubbo:registry protocol="zookeeper" address="192.168.161.73:21818" /> <!-- 使用multicast广播注册中心暴露发现服务地址 <dubbo:registry address="multicast://224.5.6.7:1234" /> --> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="demoService" interface="casdemo.DemoService" /> </beans>
Login
调用dubbo服务
WEB-INF\web.xml
demoService.sayHello()
</pre></div><div><pre name="code" class="java">package casdemo; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; /** * Servlet implementation class Login */ public class Login extends HttpServlet { private static final long serialVersionUID = 1L; //@Autowired DemoService demoService; /** * @see HttpServlet#HttpServlet() */ public Login() { super(); // TODO Auto-generated constructor stub } private ApplicationContext applicationContext; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); session.invalidate(); response.sendRedirect("login.jsp"); } public void init(ServletConfig config) throws ServletException { // TODO Auto-generatedmethod stub super.init(config); applicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); demoService=(DemoService)applicationContext.getBean("demoService"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); String username=request.getParameter("username"); System.out.println(demoService.sayHello("testman")); session.setAttribute("user",username); response.sendRedirect("usr/index.jsp"); } }
WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>casdemo</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextConfigLocation</param-name> <param-value> WEB-INF/spring-servlet.xml,classpath*:webconsumer.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>CheckLoginFilter</filter-name> <filter-class>casdemo.CheckLoginFilter</filter-class> </filter> <listener> <listener-class>casdemo.DebugSessionListener</listener-class> </listener> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>login</servlet-name> <servlet-class>casdemo.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <filter-mapping> <filter-name>CheckLoginFilter</filter-name> <url-pattern>/usr/*</url-pattern> </filter-mapping> </web-app>
WEB-INF\spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-lazy-init="true"> <context:component-scan base-package="casdemo"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="20971520" /> </bean> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>image/jpeg</value> <value>image/png</value> <value>image/svg+xml</value> <value>application/pdf</value> </list> </property> </bean> </beans>
测试
访问 http://localhost:8080/casdemo/login.jsp 登录成功后,会在控制台日志中打印Hellotestman 。
搜索
复制
相关推荐
此外,采用分布式服务治理框架如Dubbo或Spring Cloud,实现服务注册与发现、熔断和降级策略,提升系统的整体稳定性。 2. **可扩展性**:随着业务的增长,系统需要具备水平扩展的能力。这可能涉及到微服务架构,将...
1. **大型分布式系统**:在电商、金融、社交等业务场景中,Dubbo可以帮助构建大规模、高并发的分布式服务架构。 2. **微服务改造**:在进行微服务化改造时,Dubbo作为服务治理工具,能够有效管理和协调各个独立服务...
Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...
### Apache Dubbo:Dubbo的安装与环境配置 #### 一、Dubbo简介 ##### 1.1 Dubbo是什么 Dubbo是由阿里巴巴开发并维护的一个高性能、轻量级的开源微服务框架。它旨在简化分布式系统的开发过程,使得开发者能够像...
标题中的“SpringBoot Dubbo构建的电商平台”表明这是一个基于SpringBoot和Dubbo技术栈的电商系统,使用微服务架构来处理高并发场景。SpringBoot是Spring框架的一种简化使用方式,它集成了许多常用功能,方便快速...
然后,Dubbo被引入作为服务治理框架,它允许服务提供者注册服务到Zookeeper,同时服务消费者从Zookeeper中获取服务提供者的地址,从而实现服务的远程调用。 具体步骤可能包括: 1. **设置SpringBoot项目**:创建...
总的来说,品优购电商系统借助SpringBoot的快速开发特性,利用Dubbo实现服务化架构,结合MySQL的强大数据处理能力,构建了一个高效、稳定的电商解决方案。这样的设计既满足了业务需求,又保证了系统的可维护性和扩展...
这个“基于Dubbo的分布式电商系统”利用了SpringBoot、Dubbo和MySQL等技术,实现了高效、稳定的服务架构。让我们深入探讨这些技术在系统中的应用及其重要性。 【SpringBoot】 SpringBoot是Spring框架的一个简化版...
在电商系统中,Dubbo可以实现服务间的高并发调用,通过Zookeeper作为注册中心,服务提供者和服务消费者之间可以进行高效、稳定的服务交互。Dubbo还提供了QoS控制,如超时、重试、熔断等机制,增强了系统的稳定性。 ...
总的来说,双十一电商系统架构是一个复杂的分布式体系,涉及到多服务协作、分布式事务处理、模块化设计以及服务注册发现等多个关键环节。理解和掌握这些概念和技术对于构建高可用的电商平台至关重要。
在本项目中,我们主要探讨的是使用SpringBoot和Dubbo技术构建一个先进的电商平台,该平台采用了微服务架构,能够处理高并发流量,并整合了Kafka消息队列和Elasticsearch搜索引擎,以提升系统的稳定性和数据检索效率...
### 从大型电商架构演进看互联网高可用架构设计 #### 一、互联网架构演进 **五种架构模型介绍** 1. **单体架构**:最初期的软件架构模式,将所有功能集成在一个紧密耦合的应用程序中。易于理解和部署,但随着系统...
这个电商系统通过合理的架构设计,利用了SpringBoot的快速开发能力,MyBatisPlus的数据库操作便利性,Dubbo的分布式服务治理,以及Zookeeper的服务发现与注册,实现了高效、稳定的运营环境。每个模块都有明确的职责...
Dubbo作为阿里巴巴开源的服务治理框架,提供了服务注册、发现、调用、监控等功能,是构建分布式系统中微服务架构的关键组件。通过Dubbo,开发者可以将大型应用拆分成多个独立的服务,每个服务都可以独立部署、扩展和...
2. **服务治理**:Dubbo提供了丰富的服务治理功能,如服务注册与发现、负载均衡、容错机制、服务监控等,这些都是构建大规模分布式系统的关键。 3. **JavaWeb开发**:在电商项目中,开发者通常会使用JavaWeb技术来...
总的来说,这个分布式多店铺电商系统利用Spring和SpringMVC实现了业务逻辑和控制层的分离,借助Dubbo进行服务间的通信和治理,从而构建了一个可扩展、高性能的电商平台。源码的提供对于开发者来说是一份宝贵的参考...
- **实际项目中Dubbo的应用场景**:如电商系统中的订单服务、库存服务等。 - **常见问题及解决方案**:包括但不限于启动失败、调用超时等问题的排查方法。 - **性能瓶颈定位与解决**:如何使用工具和技术手段找到...
在我们的电商系统中,Zookeeper作为Dubbo的服务注册中心,负责存储和管理所有服务的元数据信息,保证服务的高可用性和一致性。在Windows环境下运行Zookeeper,虽然在生产环境中通常推荐在Linux上部署,但在开发和...
总结,Dubbo分布式商城系统通过服务化、负载均衡、监控等手段,实现了高并发、高可用的电商系统。对于开发者来说,理解并掌握这种架构设计,能有效提升系统的扩展性和稳定性,应对复杂多变的业务需求。
服务治理是Dubbo的核心功能之一,主要包括以下几个方面: 1. **服务配置**:服务提供者可以通过配置文件或API动态调整服务的元数据,如接口、版本、超时时间等。 2. **服务路由**:可以根据服务的元数据进行路由...