dubbo基础应用

1、Dubbo

1.1、Dubbo简介

Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的、轻量级的开源Java RPC框架,可以和Spring框架无缝集成,2018年阿里巴巴把这个框架捐献给了apache基金会

1.2、Dubbo架构

dubbo由Container、Provider、Registry、Consumer、Monitor构成。
Container:服务运行容器
Provider:暴露服务的服务提供方
Registry:服务注册与发现的注册中心
Consumer:调用远程服务的服务消费方
Container:统计服务的调用次数和调用时间的监控中心

2、服务注册中心Zookeeper

2.1、Zookeeper简介

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用 。

2.2、Zookeeper下载

Zookeeper下载地址

安装步骤

  1. 检查jdk环境
  2. 解压下载文件
  3. 在Zookeeper根目录下创建data文件夹存储数据
  4. 修改conf目录下zoo_sample.cfg 改名为zoo.cfg
  5. 修改配置文件zoo.cfg:dataDir=指向创建data目录

2.3、Zookeeper启动与停止

Linux环境下,进入Zookeeper的bin目录下
启动服务命令 : ./zkServer.sh start
停止服务命令 : ./zkServer.sh stop
查看服务状态: ./zkServer.sh status
客户端连接:./zkCli.sh

3、Dubbo快速入门

Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供
方的方法。

3.1、服务提供方开发

pom.xml配置

<properties> 
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.source>1.8</maven.compiler.source> 
	<maven.compiler.target>1.8</maven.compiler.target>
	<spring.version>5.0.5.RELEASE</spring.version> 
</properties> 
<dependencies> 
	<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.6.0</version> 
	</dependency> 
	<dependency> 
		<groupId>org.apache.zookeeper</groupId> 
		<artifactId>zookeeper</artifactId> 
		<version>3.4.7</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.12.1.GA</version> 
	</dependency> 
	<dependency> 
		<groupId>com.alibaba</groupId> 
		<artifactId>fastjson</artifactId> 
		<version>1.2.47</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.8</source> 
				<target>1.8</target> 
			</configuration> 
		</plugin> 
		<plugin> 
			<groupId>org.apache.tomcat.maven</groupId> 
			<artifactId>tomcat7-maven-plugin</artifactId> 
			<configuration> 
			<!-- 指定端口 -->
			<port>8081</port> 
			<!-- 请求路径 --> 
			<path>/</path> 
			</configuration> 
		</plugin> 
	</plugins> 
</build>

web.xml配置

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<display-name>Archetype Created Web Application</display-name>
	<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>

创建服务接口

public interface HelloService { 
	public String sayHello(String name); 
}

创建接口实现类

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

@Service 
public class HelloServiceImpl implements HelloService { 
	public String sayHello(String name) { 
		return "hello " + name; 
	} 
}

注意:@Service 导包是alibaba的包不是spring的包

创建applicationContext-service.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:p="http://www.springframework.org/schema/p"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd 
	   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
	<dubbo:application name="dubbodemo_provider" />
	<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址--> 
	<dubbo:registry address="zookeeper://192.168.134.129:2181"/> 
	<!-- 注册 协议和port --> 
	<dubbo:protocol name="dubbo" port="20881"></dubbo:protocol> 
	<!-- 扫描指定包,加入@Service注解的类会被发布为服务 --> 
	<dubbo:annotation package="com.lxs.service.impl" />
</beans>

Maven启动服务:tomcat:run

3.2、服务消费方开发

pom.xml同上
web.xml配置

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
	<display-name>Archetype Created Web Application</display-name>
	<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:applicationContext-web.xml</param-value> 
		</init-param> 
		<load-on-startup>1</load-on-startup> 
	</servlet>
	<servlet-mapping> 
		<servlet-name>springmvc</servlet-name> 
		<url-pattern>*.do</url-pattern> 
	</servlet-mapping>
</web-app>

复制发布工程的service

编写Controller

@Controller 
@RequestMapping("/demo") 
public class HelloController { 
	@Reference private HelloService helloService; @RequestMapping("/hello") 
	@ResponseBody 
	public String getName(String name){ 
		//远程调用 
		String result = helloService.sayHello(name); System.out.println(result); 
		return result; 
	} 
}

创建applicationContext-web.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:p="http://www.springframework.org/schema/p"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd 
	   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样 -->
	<dubbo:application name="dubbodemo-consumer" />
	<!-- 连接服务注册中心zookeeper ip为zookeeper所在服务器的ip地址--> 
	<dubbo:registry address="zookeeper://192.168.134.129:2181"/> 
	<!-- 扫描的方式暴露接口 --> 
	<dubbo:annotation package="com.lxs.service.impl" />
</beans>

maven运行: tomcat:run
在浏览器输入http://localhost:8082/demo/hello.do?name=Jack,查看浏览器输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麋鹿不知归途

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值