目录
一,背景及准备:
1,Dubbo
2,RPC
3,dubbo和zookeeper的安装
二,demo应用
一,背景及准备:
什么是分布式系统???在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。这是最简洁明了的解释。
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
分布式系统(distributed system)是建立在网络之上的软件系统。
首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。应运而生Dubbo出现了。
1,Dubbo下图展现的就是网站的演进过程!
2,RPC
我们还需要了解到RPC通信,Dubbo就是用的RPC通信在服务之间互相调用。
Remote Procedure Call 远程过程调用 是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。生活上的案例,你想吃苹果,然后你去了楼下水果店买了水果,回到家洗洗吃,这就是本地调用;同样的你想吃苹果,在美团上购买了,骑手送到你手上,你洗洗吃了,这就是远程调用。RPC最核心的两个部分,通讯,序列化。
推荐阅读文章:https://www.jianshu.com/p/2accc2840a1b
3,dubbo和zookeeper的安装注意点:
1)在安装zk的时候注意zk的配置文件
a,修改zoo.cfg配置文件
b,将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可。
c,注意几个重要位置:
4,dataDir=./ 临时数据存储的目录(可写相对路径)
5,clientPort=2181 zookeeper的端口号
6,修改完成后再次启动zookeeper
2)GitHub - apache/dubbo-admin at master 下载dubbo-admin,有可视化页面
a,进入dubbo-adminsrcmainresources application.properties配置文件 指定zookeeper地址
server.port=7001 spring.velocity.cache=false spring.velocity.charset=UTF-8 spring.velocity.layout-url=/templates/default.vm spring.messages.fallback-to-system-locale=false spring.messages.basename=i18n/message spring.root.password=root spring.guest.password=guest dubbo.registry.address=zookeeper://127.0.0.1:2181
b,在项目目录下打包dubbo-admin
打包命令 mvn clean package -Dmaven.test.skip=true
c,打包成功后去dubbo-admin的target目录下会有一个jar的可执行文件
使用java -jar dubbo-admin-0.0.1-SNAPSHOT.jar执行。
d,访问localhost:7001 ,7001是默认的端口,可以在配置文件中修改的
对于分布式的原理理解,很粗线,很表面,还需要更多的联系,应用。
二,demo应用1,新建两个module一个服务提供者,一个服务消费者
2,在provide中准备服务
买票接口:
public interface TicketService { public String getTicket(); }
接口的实现:
public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "im ticket to Lion go home"; } }
服务的提供者模型大致就这样。返回一个字符串。
3,既然服务提供者有了,那么就需要一个消费者来消费这个服务(就是调用这个服务,不然这个提供者就失去了意义)
在consumer-server中准备服务调用提供者
public class UserService { public void buyTicket(){ //去拿票(调用提供者返回的字符串) } }
现在出现问题了,我consumer怎么取拿到provider的服务呢?需要一个中间商zookeeper来从中调节。zookeeper是注册中心,用来管理服务的,我们只需要将provider给的服务注册到zookpeer中,然后consumer去zookpeer中去拿,就可以了
4,将provider注册到服务中心去。
a,引包
org.apache.dubbo dubbo-spring-boot-starter2.7.3 com.github.sgroschupf zkclient0.1 org.apache.curator curator-framework2.12.0 org.apache.curator curator-recipes2.12.0 org.apache.zookeeper zookeeper3.4.14 org.slf4j slf4j-log4j12
b,在provider的配置文件中添加配置参数
#当前应用名字 dubbo.application.name=provider-server #注册中心地址--这里用的就是本地的zk,正式环境就换到服务器上的zk,改一下地址就行 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务--非常重要,写的不对则扫描不到,就无法注册到zk当中 dubbo.scan.base-packages=com.example.service
c,服务接口完善
import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; //注意上面引用的两个包 @Service //这不是spring的service,是dubbo的 新版的这个注解变成了@DubboServoce 便于和spring的@Service区分开 @Component //交给spring管理 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "im ticket to Lion go home"; } }
以上,在provider-server启动的时候,服务就会被注册到zk,是以接口名注册的。
可以查看服务的所有信息
服务提供者完善。
5,consumer-server注册到zk中
a,引包,和provider-server一样。
需要多增加一个依赖,巨坑
org.apache.curator curator-x-discovery2.12.0
少了这个依赖就会报错org/apache/curator/x/discovery/ServiceDiscoveryBuilder巨坑
b,修改参数
#当前应用名字 dubbo.application.name=consumer-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
c,请求完善
import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service; @Service//放到容器中 是spring的@Server public class UserService { //这里要获得票,那么必须去注册中心拿 @DubboReference TicketService ts;//两种方式Pom坐标可以定义路径相同的接口名(在pom文件中引入),或者定义相同路径的接口 public void buTicket(){ System.out.println(ts.getTicket()); } }
以上,完善consumer-server,会被注册到zk中去。
可以在dubbo-admin中看见服务的信息,和provider一样。
d,测试
@SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buTicket(); } }
纯属个人学习记录之后。有错请指正。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)