RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应 用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不 在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。
1.Dubbo的架构 2.Dubbo使用前安装Zookeeper,Dubbo管理控制台的dubbo-adminZookeeper的安装(在Lunix系统下安装)下载地址:http://archive.apache.org/dist/zookeeper/
安装 jdk把 zookeeper 的压缩包(zookeeper-3.4.6.tar.gz)上传到 linux 系 统解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr进入zookeeper-3.4.6目 录,创建data目录 mkdir data进入conf目录 ,把zoo_sample.cfg 改名为zoo.cfg cd conf mv zoo_sample.cfg zoo.cfg打开zoo.cfg文件, 修改data属性:dataDir=/usr/zookeeper-3.4.6/datazookeeper的操作 进入Zookeeper的bin目录 启动服务命令 ./zkServer.sh start 停止服务命令 ./zkServer.sh stop 查看服务状态: ./zkServer.sh status 客户端连接 ./zkCli.shDubbo管理控制台的dubbo-admin
(1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下
(2)启动tomcat,此war文件会自动解压
(3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前使用的Zookeeper的ip地址和端口号
dubbo.registry.address=zookeeper://192.168.134.129:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
(4)重启tomcat
访问 http://你的地址:8080/dubbo-admin-2.6.0
3.spring boot 整合Dobbo创建三个模块:
前两个用springBoot创建,最后一个只是放接口和实体,用maven创建
dubbo-interface
依赖:
实体类
@Data@NoArgsConstructor@AllArgsConstructorpublic class UserInfo implements Serializable { private String name; private String userId; private String address;}
接口
public interface CustomerService { public List
boot-dubbo-provider 服务提供
依赖:
<?xml version="1.0" encoding="UTF-8"?>
配置文件:application.yml
#端口设置server: port: 9001#dubbo的设置dubbo: application: name: boot-dubbo-provider #dubbo在zookeeper的注册地址 registry: address: zookeeper://192.168.126.135:2181 #注册 协议和port protocol: name: dubbo port: 20881
核心代码:
//@Service这个注解不是spring框架的注解,是dobbo的注解,表示这是一个对外发布服务@Service@Componentpublic class UserInfoServiceImpl implements UserInfoService { @Override public List
启动器注解:
@SpringBootApplication@EnableDubbopublic class BootDubboProviderApplication { public static void main(String[] args) { SpringApplication.run(BootDubboProviderApplication.class, args); }}
boot-dubbo-customer 服务消费
依赖:与 boot-dubbo-provider一样
配置文件:application.yml
server: port: 9005dubbo: application: name: boot-dubbo-customer registry: address: zookeeper://192.168.126.135:2181
核心代码:
service层
@Servicepublic class CustomeServiceImpl implements CustomerService { @Reference private UserInfoService UserInfo; @Override public List
controller
@RestController@RequestMapping("customer")public class CustomerController { @Resource public CustomeServiceImpl service; @RequestMapping("{id}") public List
启动器注解:
@SpringBootApplication@EnableDubbopublic class BootDubboCustomerApplication { public static void main(String[] args) { SpringApplication.run(BootDubboCustomerApplication.class, args); }}
测试
访问 :http://192.168.126.135:8080/dubbo-admin-2.6.0
可以看服务提供者与消费者
访问 :http://localhost:9005/customer/2
可以查询到,说明两个微服务间的调用成功