Dubbo分布式框架实战
Dubbo分布式框架实战
Dubbo:2011年阿里巴巴开源的分布式服务框架。
三个主要功能:
(1)远程接口调用:Dubbo提供了基于高性能接口的RPC,对用户是透明的。
(2)负载均衡和容错:Dubbo支持开箱即用的多种负载平衡策略,可感知下游服务状态以减少总体延迟并提高系统吞吐量。
(3)服务注册和服务发现:Dubbo支持多个服务注册表,可以立即检测在线/离线服务。
Dubbo架构:
Provider:暴露服务的服务提供者
Consumer:调用远程服务的服务消费者
Registry:服务注册与发现的注册中心
Monitor:统计服务的调用次数和调用时间的监控中心
Container:服务运行容器
Dubbo例子(基于maven工程):
1.在根目录下创建3个子包:
(1)dubbo-interfacce:通用服务接口
(2)dubbo-provider:依赖dubbo-interface,开发实现类,并且配置spring文件,发布服务
(3)dubbo-consumer:依赖dubbo-interface,配置spring配置文件,调用服务
2.dubbo-provider和dubbo-consumer的pom文件中引入共同依赖:
<dependencies>
<dependency>
<groupId>com.qiuzelin</groupId>
<artifactId>dubbo-interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--引入dubbo依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.8</version>
</dependency>
<!-- zookeeper客户端依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
4.dubbo-interface:
创建接口:
package com.qiuzelin.service;
/**
* Created with IntelliJ IDEA.
*
* @Auther: qiuzelin
* @Date: 2020/09/29/11:02
* @Description:
*/
public interface IUserService {
public String hello();
}
5.dubbo-provider配置:
(1)创建interface服务实现类:
package com.qiuzelin.service.impl;
import com.qiuzelin.service.IUserService;
/**
* Created with IntelliJ IDEA.
*
* @Auther: qiuzelin
* @Date: 2020/09/29/11:07
* @Description:
*/
public class UserServiceImpl implements IUserService {
public String hello() {
return "hello,dubbo!";
}
}
(2)在resources中创建dubbo-provider.xml配置文件
<!--1.定义应用的名称 -->
<dubbo:application name="dubbo-provider"/>
<!--2.定义协议端口 -->
<dubbo:protocol port="28800"/>
<!--3.定义注册中心地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.157.128:2181"/>
<!--4.定义服务提供者 -->
<bean id="userService" class="com.qiuzelin.service.impl.UserServiceImpl"/>
<dubbo:service interface="com.qiuzelin.service.IUserService" ref="userService"/>
(3)创建Provider类(通过启动Spring容器,发布服务):
package com.qiuzelin.service.impl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
*
* @Auther: qiuzelin
* @Date: 2020/09/29/15:19
* @Description: 启动spring容器,自动发布服务
*/
public class Provider {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath:dubbo-provider.xml"});
context.start();
System.out.println("Provider started!");
System.in.read(); // 按任意键退出
}
}
运行Provider类的main方法测试:
5.dubbo-consumer配置:
(1)在resources中创建dubbo-consumer.xml配置文件:
<!--1.定义应用的名称 -->
<dubbo:application name="dubbo-consumer"/>
<!--2.定义注册中心地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.157.128:2181"/>
<!--3.引用服务 -->
<dubbo:reference interface="com.qiuzelin.service.IUserService" id="userService"/>
(2)创建Consumer类,调用远程服务
/**
* Created with IntelliJ IDEA.
*
* @Auther: qiuzelin
* @Date: 2020/09/29/15:38
* @Description:
*/
public class Consumer {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"classpath:dubbo-consumer.xml"});
context.start();
//获取远程服务
IUserService userService=context.getBean(IUserService.class);
System.out.println("获取远程服务端反馈信息"+userService.hello());
}
}
运行main方法测试:
注意:在测试Consumer时,Provider进程不能终止,否则会报错。
输入服务器地址与tomcat端口号查看:
应用进程中存在provider和consumer。
`
本文地址:https://blog.csdn.net/weixin_41570890/article/details/108871861
上一篇: ExecuteInEditMode含义
下一篇: Golang 统计字符串长度(含中文)
推荐阅读
-
Spring Cloud分布式微服务实战,养成应对复杂业务的综合技术能力
-
基于spring+quartz的分布式定时任务框架实现
-
Web前端框架bootstrap实战【第一次接触使用】
-
.Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持
-
Springboot-dubbo-fescar 阿里分布式事务的实现方法
-
Spring框架web项目实战全代码分享
-
分布式服务Dubbo+Zookeeper安全认证实例
-
python django框架中使用FastDFS分布式文件系统的安装方法
-
Spring+Hibernate+Struts(SSH)框架整合实战
-
Python爬虫框架Scrapy实战之批量抓取招聘信息