许久未见各位神仙,小编也是许久都没有写代码过了。。。很多都不熟悉了,所以花了时间为各位写了这篇dubbo来表达我的歉意
Apache Dubbo是一款高性能的java RPC框架,其前身是阿里巴巴公司开源的一个高性能、轻量级的开源java RPC框架,可以和Spring框架无缝集成。
RPC全称:自己去搜索下...意思即使远程过程调用。
(比如两个服务器A和B,A服务器上面部署了一个应用,B服务器上部署了一个应用,A服务器上面的应用想调用B服务器上面的应用提高的方法,由于两个应用不在同一个内存空间,不能直接调用,所以就需要通过网络来表达调用的语义和传达调用的数据)
RPC并不是一个具体的技术,而是整个网络远程调用过程
提供Dubbo中文文档地址
Registry:服务的注册中心(类似与SpringCloud里面的Eureka)
Provider:服务提供方
Consumer:服务消费端
Monitor:监控平台
虚线代表:异步操作
实现代表:同步操作
蓝色代表:在启动时候完成的操作
红色代表:在程序运行过程中的操作
Zookeeper结构:
提高Zookeeper下载地址
下载3.4版本(3.5版本的很多都是内测的,暂时不稳定) 随意就好
下载后解压…
进入bin目录下面进入cmd窗口,运行zkServer.cmd文件
第一次启动bin目录下面的zkServer.cmd会报错(大概意思就是配置文件找不到)
解决方案。将conf目录下的zoo_sample.cfg复制一个改成zoo.cfg
简单说下配置文件里面的内容zoo.cfg
clientPort:端口号默认2181
dataDir:临时数据的存放地方 自己创建个文件夹来存放 ../data
搞定之后重新启动zkServer.cmd没有问题了
测试一下使用zkClient.cmd
下载好之后解压 查看自己的配置文件端口号是不是正确的2181
小编是安装在D盘的:每个人安装不同路径不同
D:\Zookeeper\dubbo-admin-develop\dubbo-admin-server\src\main\resources
找到里面的application.properties查看里面的端口号是不是2181
然后根据个人情况是否使用端口号8080了,如果是的话就改成8081(默认是8080)
然后开始打包
进入到D:\Zookeeper\dubbo-admin-develop的cmd页面输入mvn clean package
等待时间是非常漫长的,然后中途会有什么WANING,ERROR这些都不用管,只要结果是下面这个SUCCESS就完事了
然后在D:\Zookeeper\dubbo-admin-develop\dubbo-admin-distribution\target里面有一个jar包
然后自己找个地方运行这个jar包在运行这个jar包之前要保证zookeeper是在运行的
图方便直接在之前的地方运行就好了…
输入地址测试。。。账号和密码默认都是root
向上抽取方法:
大概就是procider和consumer中的公共部分放入到common里面。并且在两个子项目中写入common的引入
<dependencies>
<dependency>
<groupId>com.onlyKing</groupId>
<artifactId>user-service-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
提供代码:链接:https://pan.baidu.com/s/1hdCV2NOwQILlrblYongzyA
提取码:q7p0
---------------------我是分割线哦,上面的是没有Dubbo之前的哦-----------------------------
开始导入Dubbo(都是按照dubbo文档去一步步操作) 去Maven仓库中找到相关依赖
先写user-service-provider
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
小提示:2.6版本之前是使用zkclient操作zookeeper
2.6版本之后是使用curator操作zookeeper
这里小编提供2.6之后的
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<?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: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://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 1.指定当前的服务/当前应用的名字(同样的服务名字相同,不要和别的服务同名) -->
<dubbo:application name="user-service-provider"></dubbo:application>
<!-- 2.指定注册中心的位置 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
<!-- 3.指定通信规则(大概就是消费端需要怎么来访问这个生产端这个意思) -->
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
<!-- 4.暴露服务 interface服务的接口 ref服务的真正实现-->
<dubbo:service interface="com.onlyk.service.UserService" ref="userServiceImpl"></dubbo:service>
<!-- 服务的实现 -->
<bean id="userServiceImpl" class="com.onlyk.service.impl.UserServiceImpl"></bean>
</beans>
MainApplication.java
package com.onlyk.service.impl;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApplication {
public static void main(String[] args) throws Exception {
System.setProperty("java.net.preferIPv4Stack", "true");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
context.start();
System.out.println("Provider started.");
System.in.read(); // press any key to exit
}
}
运行后监控平台看结果…
再来user-service-consumer
步骤相同就不多说…
consumer.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:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
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-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 包扫描 -->
<context:component-scan base-package="com.onlyk.service.impl"></context:component-scan>
<dubbo:application name="user-service-consumer"></dubbo:application>
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
<!-- 声明需要调用的远程服务的接口,生成远程服务代理 -->
<dubbo:reference interface="com.onlyk.service.UserService" id="userService"></dubbo:reference>
</beans>
MainApplication.java
package com.onlyk;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.onlyk.service.OrderService;
public class MainApplication {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
OrderService orderService = applicationContext.getBean(OrderService.class);
orderService.initOrder("1");
}
}
提供代码:链接:https://pan.baidu.com/s/1jat_U6iyEH2tqylCeNJknA
提取码:bsr8
在数据生产端和消费端加入如下代码:
<dubbo:monitor protocol="registry"></dubbo:monitor>
大概意思就是有点类似与Eureka一样,把自己的一些数据什么的交给监控平台来管理
嗯,这里懒得重新发一次代码了,加进去就好了
启动provide中的main
启动comsumer中的main方法
了解Dubbo续集----Dubbo与SpringBoot整合