Dubbo--Day11

所需资料下载

https://download.csdn.net/download/qq_36297434/11693161

一:SOA

1:英文名称(Service Oriented Ambiguity)

2:中文名称:面向服务架构

2.1:有一个专门提供服务单元.

2.2:其他所有单元都调用这个服务.

3:SOA定位:

3.1:如何设计项目,让开发时更有效率.

3.2:SOA是一种思想

4:之前项目架构设计

4.1:在公司项目不允许所有项目都访问数据库.

4.2:开发时,数据库访问层代码可能出现冗余

 

5:使用SOA架构

5.1:专门访问数据库服务(项目).

5.2:开发时可以实现,数据访问控制和代码复用

6:实现SOA架构时,常用服务.

6.1:Dubbo 做为服务

6.2:WebService 做为服务.

6.3:Dubbox 做为服务.

6.4:服务方就是web项目,调用web项目的控制器.

6.4.1:使用HttpClient可以调用其他项目的控制器.

二. RPC

1:英文名称(Remote Procedure Call Protocol)

2:中文名称:远程过程调用协议

3:RPC解析:客户端(A)通过互联网调用远程服务器,不知道远程服务器具体实现,只知道远程服务器提供了什么功能.

4.:RPC最大优点是数据安全性.

三.Dubbo简介

Dubbo是一个分布式、高性能、透明化的RPC服务框架,作用是提供服务自动注册、自动发现等高效服务治理方案.

3:Dubbo架构图

1.1:Provider :提供者,服务发布方

1.2:Consumer:消费者, 调用服务方

1.3:Container:Dubbo容器,依赖于Spring容器.

1.4:Registry:注册中心

当Container启动时把所有可以提供的服务列表上Registry中进行注册。作用:告诉Consumer提供了什么服务和服务方在哪里.

1.5:Monitor:监听器

1.6:虚线都是异步访问,实线都是同步访问

1.7:蓝色虚线:在启动时完成的功能

1.8:红色虚线(实线)都是程序运行过程中执行的功能

1.9 所有的角色都是可以在单独的服务器上.所以必须遵守特定的协议.

4:运行原理:

4.1:启动容器,相当于在启动Dubbo的Provider

4.2:启动后会去注册中心进行注册.注册所有可以提供的服务列表

4.3:在Consumer启动后会去Registry中获取服务列表和Provider的地址.进行订阅.

4.4:当Provider有修改后,注册中心会把消息推送给Consummer。使用了观察者设计模式(又叫发布/订阅设计模式)

4.5:根据获取到的Provider地址,真实调用Provider中功能。在Consumer方使用了代理设计模式,创建一个Provider方类的一个代理对象,通过代理对象获取Provider中真实功能,起到保护Provider真实功能的作用.

4.6:Consumer和Provider每隔1分钟向Monitor发送统计信息,统计信息包含,访问次数,频率等。

四.Dubbo支持的注册中心

1. Zookeeper

优点:支持网络集群

缺点:稳定性受限于Zookeeper

2:Redis 

优点:性能高.

缺点:对服务器环境要求较高.

3. Multicast

优点:面中心化,不需要额外安装软件.

缺点:建议同机房(局域网)内使用

4:Simple

适用于测试环境.不支持集群.

五:安装ZooKeeper

https://blog.csdn.net/qq_36297434/article/details/98350234

六. Dubbo支持的协议

1:Dubbo:Dubbo官方推荐的协议.

本质:使用NIO和线程池进行处理.

缺点:大文件传输时可能出现文件传输失败问题.

2:RMI,JDK提供的协议,远程方法调用协议.

缺点:偶尔连接失败.

优点:JDK原生,不需要进行额外配置(导入jar)

3:Hession

优点:基于http协议,http请求支持.

缺点:需要额外导入jar,并在短连接时性能低
 

 七:一个Duboo项目实例

执行项目时要快开启ZooKeeper

1:provider

1.1:新建一个provider的服务接口Maven项目(dubbo-service)

1.1.1:新建包hhxy.service,新建如下接口

DemoService

package hhxy.service;

public interface DemoService {
	String demo(String name);
}

1.2:新建一个provider的服务实现Maven项目(dubbo-service-impl)

1.2.1:配置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>hhxy</groupId>
  <artifactId>dubbo-service-impl</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>	
  		<groupId>hhxy</groupId>
  		<artifactId>dubbo-service</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>2.5.3</version>
		<exclusions>
			<exclusion>
				<artifactId>spring</artifactId>
				<groupId>org.springframework</groupId>
			</exclusion>
		</exclusions>
	</dependency>
  	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.1.6.RELEASE</version>
	</dependency>
	<!-- 访问zookeeper的客户端jar -->
	<dependency>
		<groupId>com.101tec</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.10</version>
	</dependency>	
  </dependencies>
</project>

1.2.2:配置applicationContest-dubbo.xml(具体位置看1.2.6)

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	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://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd
		http://code.alibabatech.com/schema/dubbo 
		http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 给当前Provider自定义个名字 -->
	<dubbo:application name="dubbo-service"/>
	<!-- 配置注册中心  -->
	<dubbo:registry address="192.168.126.129:2181" protocol="zookeeper"></dubbo:registry>
	<!-- 配置端口 -->
	<dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
	<!-- 注册功能 -->
	<dubbo:service interface="hhxy.service.DemoService" ref="demoServiceImpl"></dubbo:service>

	<bean id="demoServiceImpl" class="hhxy.service.impl.DemoServiceImpl"></bean>
</beans>

1.2.3:新建包hhxy.service.impl,包下新建如下类

DemoServiceImpl:

package hhxy.service.impl;

import hhxy.service.DemoService;

public class DemoServiceImpl implements DemoService{

	@Override
	public String demo(String name) {
		// TODO Auto-generated method stub
		return "传递来的name:"+ name;			
	}

}

1.2.4:新建包hhxy.test,包下新建测试类

package hhxy.test;

import com.alibaba.dubbo.container.Main;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        
        //第一种启动方式
        ClassPathXmlApplicationContext ac = new         ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
		ac.start();
		System.out.println("启动成功");
		System.in.read();



		//第二种启动方式,要求配置文件路径为META-INF/spring/*.xml
		Main.main(args);
	}

}

2:consumer

2.1:新建consumer的一个Maven项目(dubbo-consumer)

2.1.1:配置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>hhxy</groupId>
  <artifactId>dubbo-consumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
   <dependencies>
  	<dependency>	
  		<groupId>hhxy</groupId>
  		<artifactId>dubbo-service</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
  	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>dubbo</artifactId>
		<version>2.5.3</version>
		<exclusions>
			<exclusion>
				<artifactId>spring</artifactId>
				<groupId>org.springframework</groupId>
			</exclusion>
		</exclusions>
	</dependency>
  	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.1.6.RELEASE</version>
	</dependency>
	<!-- 访问zookeeper的客户端jar -->
	<dependency>
		<groupId>com.101tec</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.10</version>
	</dependency>	
  </dependencies>
</project>

2.1.2:配置applicationContext-dubbo.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	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://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd
		http://code.alibabatech.com/schema/dubbo 
		http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	<!-- 给当前Provider自定义个名字 -->
	<dubbo:application name="dubbo-consumer"/>
	<!-- 配置注册中心  -->
    <!-- 集群时,,address用逗号分隔  -->
	<dubbo:registry address="192.168.126.129:2181" protocol="zookeeper"></dubbo:registry>
	<!-- 配置注解扫描 -->
	<dubbo:annotation package="hhxy.consumer.service.impl"/>
	<bean id="testImpl" class="hhxy.consumer.service.impl.TestServiceImpl"></bean>
</beans>

 

2.1.3:新建包hhxy.consumer.service,包下新建如下类:

TestService:

package hhxy.consumer.service;

public interface TestService {
	void test();
}

2.1.4:新建hhxy.consumer.service.impl包,包下新建如下类

TestServiceImpl:

package hhxy.consumer.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;

import hhxy.consumer.service.TestService;
import hhxy.service.DemoService;

public class TestServiceImpl implements TestService{

	@Reference
	private DemoService demoService;
	@Override
	public void test() {
		// TODO Auto-generated method stub
		//调用Provice中提供的功能 
		String name=demoService.demo("李伟康");
		System.out.println(name);
	}

}

2.1.5:新建hhxy.consumer.test包,包下测试类

package hhxy.consumer.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import hhxy.consumer.service.TestService;
import hhxy.consumer.service.impl.TestServiceImpl;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
		TestService testService=ac.getBean("testImpl",TestServiceImpl.class);
		testService.test();
	}

}

八:Admin管理界面

本质就是一个web项目,获取注册中心内Provider注册的信息.用页面呈现出来.

实现步骤:

1:把dubbo-admin-2.5.3.war上传到服务器tomcat中。

2:启动tomcat完成后关闭tomcat,删除上传的dubbo-admin-2.5.3.war,因为需要修改解压后的文件夹,如果不删除.war文件,下次重启tomcat会还原成未修改状态。

3: 进入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行为zookeeper的ip和端口

4: 第二行和第三行为管理界面的用户名和密码

5:启动ZooKeeper,tomcat, 在浏览器地址栏访问tomcat中dubbo项目

九:Maven项目的debug

1:右键项目  --> debug as  --> 最下面 debug configuration

2:选择source

3:删除默认default

4:点击add

5:选择对应的项目

6:点击debug

十 一:Maven打包插件Assembly

1:在dubbo的provider项目(实现类项目)中pom.xml配置assembly插件信息

            <!-- 指定项目的打包插件信息 -->
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<!-- 指定打包描述文件的位置:相对项目根目录的路径 -->
					<!-- assembly打包的描述文件 -->
					<descriptor>assembly/assembly.xml</descriptor>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

2:在项目根目录下新建assembly文件夹

3:在assembly文件夹中新建assembly.xml

<?xml version='1.0' encoding='UTF-8'?>
<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
	<!-- 该字符会添加到最终tar.gz包的名称后面,作为后缀 -->
	<id>assembly</id>
	<!-- 指定打包的格式为tar.gz,该类型压缩包在linux中比较常见 -->
	<formats>
		<format>tar.gz</format>
	</formats>
	<!-- 在tar.gz压缩包中是否包含根文件夹,该根文件夹名称和tar.gz去掉id后缀一致 -->
	<includeBaseDirectory>true</includeBaseDirectory>
	<fileSets>
		<!-- 将项目根路径下assembly/bin路径中的内容打包到压缩包中的根目录下的bin目录中 -->
		<fileSet>
			<!-- 相对项目根路径的相对路径 -->
			<directory>assembly/bin</directory>
			<outputDirectory>bin</outputDirectory>
			<!-- 设置最终tar.gz中该文件夹下的权限,跟linux权限写法一致 -->
			<fileMode>0755</fileMode>
		</fileSet>
		<!-- 将项目根路径下assembly/conf路径中的内容打包到压缩包中的根目录下的conf目录中 -->
		<fileSet>
			<directory>assembly/conf</directory>
			<outputDirectory>conf</outputDirectory>
			<!-- 设置其linux权限 -->
			<fileMode>0644</fileMode>
		</fileSet>
	</fileSets>
	<!-- 将所有依赖的jar包打包到压缩包中的根目录下的lib目录中 -->
	<!-- 此lib目录中包含自己开发的项目jar包以及demo_service.jar,还有第三方的jar包 -->
	<dependencySets>
		<dependencySet>
			<outputDirectory>lib</outputDirectory>
		</dependencySet>
	</dependencySets>
</assembly>

4:处理assembly文件夹

4.1:解压下载的dubbo-monitor-simple-2.5.3-assembly.tar.gz压缩包,把解压后的bin和conf粘贴到项目下assembly文件夹中.

4.2:清空conf/dubbo.properties中内容.

5.开始打包

5.1:右键项目--> maven install 

5.2:在target下出现:项目名-版本-assembly.tar.gz压缩包

6:运行

把压缩包复制到window或linux中。window中使用start.bat启动,关闭命令窗口关闭服务;linux中使用start.sh启动使用stop.sh关闭。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值