Habilidades previas de desarrollo de big data __ Inicio rápido de Dubbox

1. Introducción a Dubbox
1.1 ¿Qué es la arquitectura
SOA? SOA es el acrónimo de Arquitectura orientada a servicios y es un estilo arquitectónico que admite la arquitectura orientada a servicios. Desde la perspectiva del servicio, el desarrollo basado en el servicio y los resultados del servicio, la orientación al servicio es una forma de pensar. De hecho, la arquitectura SOA se utiliza más en el desarrollo de proyectos de Internet.
¿Por qué los proyectos de Internet adoptan la arquitectura SOA? Con el desarrollo de Internet, la escala de las aplicaciones de sitios web continúa expandiéndose y las arquitecturas de aplicaciones verticales convencionales ya no pueden hacer frente a ella. La arquitectura de servicios distribuidos y la arquitectura de computación móvil son imperativas, y se necesita con urgencia un sistema de gobernanza para garantizar una evolución ordenada de la arquitectura.
Echemos un vistazo a la evolución de la arquitectura de desarrollo. Como se muestra abajo:
Inserte la descripción de la imagen aquí

 Arquitectura de aplicación única
 Cuando el tráfico del sitio web es muy pequeño, solo se necesita una aplicación y todas las funciones se implementan juntas para reducir los nodos de implementación y los costos. En este momento, el marco de acceso a datos (ORM) es la clave para simplificar la carga de trabajo de agregar, eliminar, modificar y verificar.
 Arquitectura vertical de la aplicación
 Cuando el número de visitas aumenta gradualmente, la aceleración causada por la adición de una sola aplicación a la máquina se hace cada vez más pequeña La aplicación se divide en varias aplicaciones no relacionadas para mejorar la eficiencia. En este punto, el marco web (MVC) utilizado para acelerar el desarrollo de las páginas frontales es la clave.
 Arquitectura de servicios distribuidos
 Cuando hay cada vez más aplicaciones verticales, la interacción entre aplicaciones es inevitable. El core business se extrae como un servicio independiente, formando gradualmente un centro de servicios estable, de modo que las aplicaciones front-end puedan responder más rápidamente a los cambios condiciones Demanda del mercado. En este momento, el marco de servicio distribuido (RPC) para mejorar la integración y la reutilización empresarial es la clave.
 Arquitectura de computación móvil
 Cuando hay cada vez más servicios, aparece gradualmente la evaluación de la capacidad y el desperdicio de pequeños recursos del servicio, en este momento es necesario agregar un centro de despacho para administrar la capacidad del clúster en tiempo real en base a la acceder a la presión y mejorar la utilización del clúster. En este momento, el centro de programación y gobernanza de recursos (SOA) utilizado para mejorar la utilización de la máquina es la clave.
El Dubbox que vamos a explicar hoy es una arquitectura de computación móvil.
1.2 Introducción a
Dubbox Dubbox es un marco de servicio distribuido. Su predecesor fue el proyecto de código abierto Dubbo de Alibaba. Se utilizó en proyectos nacionales de comercio electrónico e Internet. Más tarde, Alibaba detuvo el mantenimiento del proyecto y Dangdang se optimizó sobre la base de Dubbo. Y seguir manteniendo, con el fin de distinguirse del Dubbo original, por eso se llama Dubbox.

Dubbox se compromete a proporcionar soluciones de invocación de servicios remotos RPC transparentes y de alto rendimiento y soluciones de gobernanza de servicios SOA. En pocas palabras, dubbox es un marco de servicio. Si no hay un requisito distribuido, en realidad es innecesario. Solo cuando se distribuye, existe un requisito para un marco de servicio distribuido como dubbox, y es esencialmente una llamada de servicio. Dongdong, para Dicho sin rodeos, es un marco distribuido para la invocación de servicios remotos.
Inserte la descripción de la imagen aquí

Descripción del rol de nodo:
 Proveedor: el proveedor de servicios que expone el servicio.
 Consumidor: el consumidor del servicio que llama al servicio remoto.
 Registro: el registro para el registro y descubrimiento de servicios.
 Monitor: Un centro de monitoreo que cuenta el orden de llamada y el tiempo de llamada del servicio.
 Contenedor: el servicio ejecuta el contenedor.
Descripción de la relación de llamada:
 0. El contenedor de servicios es responsable de iniciar, cargar y ejecutar el proveedor de servicios.
 1. Cuando el proveedor de servicios se inicia, registra sus servicios en el centro de registro.
 2. Cuando el consumidor del servicio comienza, se suscribe al centro de registro para el servicio que necesita.
 3. El centro de registro devuelve la lista de direcciones de proveedores de servicios al consumidor. Si hay un cambio, el centro de registro enviará los
datos del cambio al consumidor en función de la conexión larga .
 4. Los consumidores de servicios, de la lista de direcciones de proveedores, según el algoritmo de equilibrio de carga suave, seleccionan un proveedor para llamar y,
si la llamada falla, seleccionan otro para llamar.
 5. Los consumidores y proveedores de servicios acumulan el número de llamadas y el tiempo de llamadas en la memoria y envían
datos estadísticos al centro de monitoreo cada minuto .
1.3 Nuevas funciones de Dubbox (entender)
Dubbox evolucionó a partir de Dubbo y conserva el método de configuración original de Dubbo. Aquí presentamos las nuevas características de Dubbox.
Admite llamadas remotas de estilo REST (HTTP + JSON / XML): basadas en el marco JBoss RestEasy muy maduro, las llamadas remotas de estilo REST (HTTP + JSON / XML) se implementan en dubbox para simplificar significativamente la interacción entre idiomas dentro de la empresa. Simplifique significativamente el desarrollo de API abiertas externas, API inalámbricas e incluso servidores AJAX para empresas. De hecho, esta llamada REST también permite que Dubbox proporcione soporte básico para la arquitectura de "microservicio" particularmente popular de la actualidad. Además, las llamadas REST también han logrado un rendimiento relativamente alto.Según la prueba de referencia, solo hay aproximadamente 1,5 veces la brecha entre HTTP + JSON y el protocolo RPC predeterminado de Dubbo 2.x (es decir, serialización binaria TCP + Hessian2).
Admite la implementación eficiente de serialización de Java basada en Kryo y FST: Basado en las bibliotecas de serialización de alto rendimiento Kryo y FST más conocidas de la actualidad, se ha agregado una nueva implementación de serialización al protocolo RPC predeterminado de Dubbo, y su sistema de serialización se ha optimizado y ajustado. que es más significativo Mejoró el rendimiento de Dubbo RPC.
Admite la serialización JSON basada en Jackson: basada en la biblioteca de serialización Jackson más utilizada en la industria, se agrega una nueva implementación de serialización JSON al protocolo RPC predeterminado de Dubbo.
Admite el sistema de comunicación remota HTTP basado en Tomcat integrado: implemente el sistema de comunicación remota HTTP de dubbo basado en tomcat integrado (es decir, dubbo-remoting-http) para reemplazar gradualmente la versión anterior de Jetty integrado en Dubbo, lo que puede mejorar significativamente la lejanía de REST, etc. y actualice la compatibilidad con la API de Servlet de 2.5 a 3.1. (Nota: a excepción de REST, WebServices, Hessian, HTTP Invoker y otros protocolos en dubbo se basan en este sistema de comunicación remota HTTP).
Actualizar Spring: actualice Spring en dubbo de 2.xa la versión 3.x más utilizada para reducir los problemas causados ​​por los conflictos de versiones.
Actualizar el cliente de ZooKeeper: actualice el cliente de ZooKeeper en dubbo a la última versión para corregir los errores contenidos en la versión anterior.
Admite la configuración de Dubbo basada completamente en código Java: Java Config basado en Spring realiza una forma de código Java puro completamente no XML para configurar dubbo.
Ajuste la aplicación de demostración: ajuste temporalmente y reescriba la aplicación de demostración de dubbo para demostrar la función REST y la novedad de el protocolo Dubbo. Método de serialización, configuración Spring basada en código Java, etc.
Nota: Dubbox y Dubbo 2.X son compatibles y no han cambiado ninguna función existente ni métodos de configuración de Dubbo (excepto para la actualización de Spring y otras versiones)
Inserte la descripción de la imagen aquí
2. Construcción del entorno de desarrollo de Dubbox
2.1 Centro de registro Zookeeper
2.1.1 Introducción
oficial de Zookeeper It Se recomienda utilizar el registro de cuidadores del zoológico. El centro de registro es responsable del registro y la búsqueda de la dirección del servicio, que es equivalente a un servicio de directorio. Los proveedores de servicios y los consumidores solo interactúan con el centro de registro al inicio, y el centro de registro no reenvía solicitudes, por lo que la presión es menor. .
Zookeeper es un subproyecto de Apacahe Hadoop. Es un servicio de directorio tipo árbol que soporta cambios. Es adecuado como centro de registro para servicios Dubbox. Tiene una alta fuerza industrial y puede usarse en un entorno de producción.
2.1.2 Instalación de Zookeeper en el sistema Linux
Pasos de instalación:
Paso 1: Instale jdk
Paso 2: Cargue el paquete comprimido de Zookeeper en el sistema Linux.
Alt + P ingresa SFTP, ingresa put d: \ zookeeper-3.4.6.tar.gz para cargar
Paso 3: Descomprime el paquete comprimido
tar-zxvf zookeeper-3.4.6.tar.gz
Paso 4: Ingrese al directorio zookeeper-3.4.6 y cree una carpeta de datos.
mkdir data
Paso 5: Ingrese al directorio conf y cambie el nombre de zoo_sample.cfg a zoo.cfg
cd conf
mv zoo_sample.cfg zoo.cfg
Paso 6: Abra zoo.cfg y modifique el atributo de datos: dataDir = / root / zookeeper-3.4.6 / data
2.1.3 Inicio del servicio Zookeeper
Ingrese al directorio bin, inicie el servicio e ingrese el
comando./zkServer.sh start
emite el siguiente contenido para indicar un inicio exitoso

Cierre el comando de entrada de servicio.
/ZkServer.sh detiene la
salida del siguiente mensaje de solicitud

Verifique el estado:
./zkServer.sh status
Si es el estado de inicio, pregunte

Si no se inicia, pregunte:

2.2 Implementación e instalación del paquete JAR local de Dubbox El
paquete jar de Dubbox no se implementa en el almacén central de Maven. Puede encontrar en el almacén central de Maven que la versión final de Dubbo es la 2.5.3. Después de que Alibaba disolvió el equipo de Dubbo, Dangdang Net continúa manteniendo este proyecto y lo renombró Dubbox, las coordenadas permanecen sin cambios y la versión ha cambiado, pero no se ha enviado al almacén central.
Ahora necesitamos instalar manualmente el paquete jar de Dubbox en mi almacén local.
Primero coloque el paquete dubbo-2.8.4.jar en d: \ setup, y luego ingrese el comando
mvn install: install-file -Dfile = d: \ setup \ dubbo-2.8.4.jar -DgroupId = com.alibaba - DartifactId = dubbo -Dversion = 2.8.4 -Dpackaging = jar
2.3 Configurar restricciones fuera de línea
Dirección:
enlace
3. Comenzando con Dubbox
3.1 Método de configuración

3.1.1 Construcción del marco
(1) Cree un proyecto Maven (POM) dubboxdemo-parent e introduzca dependencias en pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.itcast.dubboxdemo</groupId>
  <artifactId>dubboxdemo-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>  
    <properties>		
		<spring.version>4.2.4.RELEASE</spring.version>
   </properties>    
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>	
		<!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.8.4</version>			
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>
		<dependency>
			<groupId>javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.11.0.GA</version>
		</dependency>		
	</dependencies>
   <build>  
	  <plugins>
	      <plugin>  
	          <groupId>org.apache.maven.plugins</groupId>  
	          <artifactId>maven-compiler-plugin</artifactId>  
	          <version>2.3.2</version>  
	          <configuration>  
	              <source>1.7</source>  
	              <target>1.7</target>  
	          </configuration>  
	      </plugin>  	      
	  </plugins>  
    </build> 
</project>
(2)创建Maven模块(JAR)  dubboxdemo-interface  

(3)创建Maven模块(WAR) dubboxdemo-service  
     在pom.xml 中,添加tomcat7插件
 <build>  
	  <plugins>
	      <plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<!-- 指定端口 -->
					<port>8081</port>
					<!-- 请求路径 -->
					<path>/</path>
				</configuration>
	  	  </plugin>
	  </plugins>  
    </build>
 在webapp下创建WEB-INF/web.xml 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">	
	<!-- 加载spring容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml</param-value>
	</context-param>
	<listener>		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>	
</web-app>
(4)创建Maven模块(WAR) dubboxdemo-web   

En pom.xml, agregue el complemento tomcat7


```bash
 <build>  
	  <plugins>
	      <plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<!-- 指定端口 -->
					<port>8082</port>
					<!-- 请求路径 -->
					<path>/</path>
				</configuration>
	  	  </plugin>
	  </plugins>  
    </build>
 在webapp下创建WEB-INF/web.xml 
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">	
   <!-- 解决post乱码 -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>	
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  </servlet>  
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

(5)构建依赖,让dubboxdemo-service 模块和dubboxdemo-web模块都依赖dubboxdemo-interface模块

3.1.2服务提供者
开发步骤:
(1)创建业务接口
在dubboxdemo-service 模块创建包cn.itcast.dubboxdemo.service,用于存放业务接口,创建接口UserService 

```bash
package cn.itcast.dubboxdemo.service;
/**
 * 业务接口
 * @author Administrator
 *
 */
public interface UserService {	
	public String getName();	
}
(2)创建业务实现类
创建包cn.itcast.dubboxdemo.service.impl ,用于存放业务实现类。创建业务实现类:
package cn.itcast.dubboxdemo.service.impl;
import org.springframework.stereotype.Service;
import cn.itcast.dubbodemo.service.UserService;
@Service
public class UserServiceImpl implements UserService {
	public String getName() {		
		return "itheima";
	}
}

(3) Escriba el archivo de configuración
Create applicationContext-service.xml en src / main / resources, el contenido es el siguiente:
<context: component-scan base-package = "cn.itcast.dubboxdemo.service.impl" />

< dubbo: nombre de la aplicación = "dubboxdemo-service" />
<dubbo: registration address = "zookeeper: //192.168.17.129: 2181" />

<dubbo: service protocol = "dubbo"
timeout = "2000" connections = "100"
interface = “cn.itcast.dubboxdemo.service.UserService" ref = "userServiceImpl" />
(4)
Ejecución de prueba tomcat7: ejecutar
3.1.3 Consumidor de servicios
Pasos de desarrollo:
(1) Controlador de escritura

package cn.itcast.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
    
    
	@Autowired
	private UserService userService;	
	@RequestMapping("/name")
	@ResponseBody
	public String showName(){
    
    
		return userService.getName();
	}		
}

(2) Escriba el archivo de configuración de primavera
Cree springmvc.xml en src / main / resources

<context:component-scan base-package="cn.itcast.dubboxdemo.controller" />
<mvc:annotation-driven >
	<mvc:message-converters register-defaults="false">
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">  
			<constructor-arg value="UTF-8" />
		</bean>  
	</mvc:message-converters>	
</mvc:annotation-driven>	
<!-- 引用dubbo 服务 -->
<dubbo:application name="dubboxdemo-web" />
<dubbo:registry address="zookeeper://192.168.17.129:2181"/>
<dubbo:reference interface="cn.itcast.dubboxdemo.service.UserService" id="userService" />

(3) Ejecute la prueba
tomcat7: ejecute
, ingrese http: // localhost: 8082 / user / name.action en el navegador y verifique la salida del navegador.
3.2 Método de anotación
3.2.1 El marco está construido
y el método de configuración es el mismo (los pasos se omiten)
3.2.2 El proveedor de servicios
(1) crea el paquete cn.itcast.dubboxdemo.service.impl para almacenar las clases de implementación empresarial. Cree una clase de implementación empresarial:

package cn.itcast.dubboxdemo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import cn.itcast.dubboxdemo.service.UserService;
@Service
public class UserServiceImpl implements UserService {
    
    
	public String getName() {
    
    		
		return "itcast";
	}
}

Nota: La anotación de servicio es diferente de la original. Debe importarse bajo el paquete com.alibaba
(2) Cree applicationContext-service.xml bajo src / main / resources, el contenido es el siguiente:
<dubbo: paquete de anotación = “Cn.itcast.dubboxdemo.service” />
<dubbo: application name = “dubboxdemo-service” />
<dubbo: registration address = “zookeeper: //192.168.17.129: 2181” />
Nota: dubbo: la anotación es se utiliza para escanear las anotaciones de @Service, no es necesario escribir servicios Configuración liberada.
3.2.3 Consumidor de servicios
(1) Controlador de escritura

package cn.itcast.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
    
    
	@Autowired
	private UserService userService;	
	@RequestMapping("/name")
	@ResponseBody
	public String showName(){
    
    
		return userService.getName();
	}		
}

(2) Escriba el archivo de configuración de primavera
Cree springmvc.xml en src / main / resources

	<!-- 引用dubbo 服务 -->
 <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />  	
<dubbo:application name="dubboxdemo-web" />
<dubbo:registry address="zookeeper://192.168.17.129:2181"/>

(3) Ejecute la prueba
tomcat7: ejecute
, ingrese http: // localhost: 8082 / user / name.action en el navegador y verifique los resultados de salida del navegador

Supongo que te gusta

Origin blog.csdn.net/xianyu120/article/details/114686416
Recomendado
Clasificación