`
wh0426
  • 浏览: 56174 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
Group-logo
架构师的知识与实践
浏览量:56175
社区版块
存档分类
最新评论

社区电商系统架构之服务治理篇:dubbo的实验

阅读更多

本篇实验dubbo的去中心化服务治理能力

dubbo介绍

服务治理开源项目,具备服务自动伸缩能力。当有部分dubbo服务实例不可用时,其通过注册中心(本实验是zookeeper注册中心),将不可用的服务在客户端调用层删除。
 
实验主机
 
localhostdubbo 服务实例
localhost casdemo web示例,允当dubbo服务消费者
localhost zookeeper实例

zookeeper启动

./zkServer.sh start
 
可以配置多个zookeeper实例

服务端

发布demoService.sayHello()服务
</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服务
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 。
 

搜索

复制

分享到:
评论

相关推荐

    大型分布式电商系统架构是如何从0开始演进的?

    此外,采用分布式服务治理框架如Dubbo或Spring Cloud,实现服务注册与发现、熔断和降级策略,提升系统的整体稳定性。 2. **可扩展性**:随着业务的增长,系统需要具备水平扩展的能力。这可能涉及到微服务架构,将...

    服务治理工具dubbo

    1. **大型分布式系统**:在电商、金融、社交等业务场景中,Dubbo可以帮助构建大规模、高并发的分布式服务架构。 2. **微服务改造**:在进行微服务化改造时,Dubbo作为服务治理工具,能够有效管理和协调各个独立服务...

    dubbo视频教程|基于Dubbo的分布式系统架构实战

    Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...

    Apache Dubbo:Dubbo的安装与环境配置

    ### Apache Dubbo:Dubbo的安装与环境配置 #### 一、Dubbo简介 ##### 1.1 Dubbo是什么 Dubbo是由阿里巴巴开发并维护的一个高性能、轻量级的开源微服务框架。它旨在简化分布式系统的开发过程,使得开发者能够像...

    ... SpringBoot Dubbo构建的电商平台 微服务架构 商城 电商 微服务 高并发 kafka

    标题中的“SpringBoot Dubbo构建的电商平台”表明这是一个基于SpringBoot和Dubbo技术栈的电商系统,使用微服务架构来处理高并发场景。SpringBoot是Spring框架的一种简化使用方式,它集成了许多常用功能,方便快速...

    springboot+dubbo+zookeeper构建的分布式调用服务框架

    然后,Dubbo被引入作为服务治理框架,它允许服务提供者注册服务到Zookeeper,同时服务消费者从Zookeeper中获取服务提供者的地址,从而实现服务的远程调用。 具体步骤可能包括: 1. **设置SpringBoot项目**:创建...

    品优购电商系统--springboot+dubbo版.zip

    总的来说,品优购电商系统借助SpringBoot的快速开发特性,利用Dubbo实现服务化架构,结合MySQL的强大数据处理能力,构建了一个高效、稳定的电商解决方案。这样的设计既满足了业务需求,又保证了系统的可维护性和扩展...

    基于Dubbo的分布式电商系统.zip

    这个“基于Dubbo的分布式电商系统”利用了SpringBoot、Dubbo和MySQL等技术,实现了高效、稳定的服务架构。让我们深入探讨这些技术在系统中的应用及其重要性。 【SpringBoot】 SpringBoot是Spring框架的一个简化版...

    电商系统,使用Spring Cloud,Dubbo等技术开发.zip

    在电商系统中,Dubbo可以实现服务间的高并发调用,通过Zookeeper作为注册中心,服务提供者和服务消费者之间可以进行高效、稳定的服务交互。Dubbo还提供了QoS控制,如超时、重试、熔断等机制,增强了系统的稳定性。 ...

    第一节课双十一电商系统架构1

    总的来说,双十一电商系统架构是一个复杂的分布式体系,涉及到多服务协作、分布式事务处理、模块化设计以及服务注册发现等多个关键环节。理解和掌握这些概念和技术对于构建高可用的电商平台至关重要。

    SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch.zip

    在本项目中,我们主要探讨的是使用SpringBoot和Dubbo技术构建一个先进的电商平台,该平台采用了微服务架构,能够处理高并发流量,并整合了Kafka消息队列和Elasticsearch搜索引擎,以提升系统的稳定性和数据检索效率...

    从大型电商架构演进看互联网高可用架构设计——内训方案.pdf

    ### 从大型电商架构演进看互联网高可用架构设计 #### 一、互联网架构演进 **五种架构模型介绍** 1. **单体架构**:最初期的软件架构模式,将所有功能集成在一个紧密耦合的应用程序中。易于理解和部署,但随着系统...

    电商系统,基于SpringBoot+MyBatisPlus+Dubbo+zookeeper实现.zip

    这个电商系统通过合理的架构设计,利用了SpringBoot的快速开发能力,MyBatisPlus的数据库操作便利性,Dubbo的分布式服务治理,以及Zookeeper的服务发现与注册,实现了高效、稳定的运营环境。每个模块都有明确的职责...

    大规模分布式存储系统:原理解析与架构实战pdf文档+电商项目视频资源

    Dubbo作为阿里巴巴开源的服务治理框架,提供了服务注册、发现、调用、监控等功能,是构建分布式系统中微服务架构的关键组件。通过Dubbo,开发者可以将大型应用拆分成多个独立的服务,每个服务都可以独立部署、扩展和...

    dubbo.war和教程

    2. **服务治理**:Dubbo提供了丰富的服务治理功能,如服务注册与发现、负载均衡、容错机制、服务监控等,这些都是构建大规模分布式系统的关键。 3. **JavaWeb开发**:在电商项目中,开发者通常会使用JavaWeb技术来...

    分布式多店铺电商系统,使用技术:spring 、springmvc

    总的来说,这个分布式多店铺电商系统利用Spring和SpringMVC实现了业务逻辑和控制层的分离,借助Dubbo进行服务间的通信和治理,从而构建了一个可扩展、高性能的电商平台。源码的提供对于开发者来说是一份宝贵的参考...

    Dubbo高级视频教程

    - **实际项目中Dubbo的应用场景**:如电商系统中的订单服务、库存服务等。 - **常见问题及解决方案**:包括但不限于启动失败、调用超时等问题的排查方法。 - **性能瓶颈定位与解决**:如何使用工具和技术手段找到...

    分布式微服务电商系统搭建

    在我们的电商系统中,Zookeeper作为Dubbo的服务注册中心,负责存储和管理所有服务的元数据信息,保证服务的高可用性和一致性。在Windows环境下运行Zookeeper,虽然在生产环境中通常推荐在Linux上部署,但在开发和...

    dubbo分步式商城系统

    总结,Dubbo分布式商城系统通过服务化、负载均衡、监控等手段,实现了高并发、高可用的电商系统。对于开发者来说,理解并掌握这种架构设计,能有效提升系统的扩展性和稳定性,应对复杂多变的业务需求。

    taobao dubbo框架

    服务治理是Dubbo的核心功能之一,主要包括以下几个方面: 1. **服务配置**:服务提供者可以通过配置文件或API动态调整服务的元数据,如接口、版本、超时时间等。 2. **服务路由**:可以根据服务的元数据进行路由...

Global site tag (gtag.js) - Google Analytics