作者:叔叔123 | 来源:互联网 | 2023-09-24 13:40
Dubbo是一款高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。ZooKeeper是一个分布式的
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
现在我们便使用SpringBoot+zookeeper+dubbo的方式编写一个小小的demo。闲话不多说直接给上案例目录结构。
dubbo-api里面存放的是一些公共的方法,实体类以及接口。如图:
因为是简单的案例,所以只有一个实体类以及一个接口对应的代码如下:
User
package com.it.ds.model;import lombok.Data;import java.io.Serializable;/*** @ClassName: User* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:22*/
@Data
public class User implements Serializable {private String id;private String userName;private String password;private String amil;private String address;
}
IUserService
package com.it.ds.service;import com.it.ds.model.User;import java.util.List;public interface IUserService {List getAll();
}
接下来便是对应的提供者dubbo-provider对应的模块,提供者里面主要的便是接口的实现类UserServiceImpl,由于是简单的案例,所以就没有进行数据库查询,直接使用虚拟数据,代码如下:
package com.it.ds.service.impl;import com.it.ds.model.User;
import com.it.ds.service.IUserService;
import org.springframework.stereotype.Service;import java.util.Arrays;
import java.util.List;
import java.util.UUID;/*** @ClassName: UserServiceImpl* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:26*/
@Service
@com.alibaba.dubbo.config.annotation.Service //暴露dubbo服务
public class UserServiceImpl implements IUserService {@Overridepublic List getAll() {User user1 = new User();user1.setId(UUID.randomUUID().toString());user1.setUserName("盗帅");user1.setPassword("123456");user1.setAmil("10086@qq.com");user1.setAddress("北京");User user2 = new User();user2.setId(UUID.randomUUID().toString());user2.setUserName("孙悟空");user2.setPassword("123456");user2.setAmil("10087@qq.com");user2.setAddress("上海");return Arrays.asList(user1,user2);}
}
其中最重要的便是@com.alibaba.dubbo.config.annotation.Service 这个注解,这个注解的作用是暴露服务,也就是将这个服务暴露出去提供消费者调用这个服务以达到不同服务器上的相互调用。接着便是需要进行一些配置将服务注册到注册中心了,在案例中使用的是zookeeper注册中心。因为是简单的入门案例,所以这里只需要进行一些基本的配置即可,具体的配置如下
#指定当前服务的名字
dubbo.application.name=dubbo-provider
#指定注册中心的位置 protocol:指定协议
dubbo.registry.protocol=zookeeper
#address:指定地址
dubbo.registry.address=127.0.0.1:2181
#指定通信规则和端口号
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#连接监控中心
dubbo.monitor.protocol=registry
接下来也是比较关键的一步了,配置什么的都写好了,剩下的就是需要zookeeper,接下来我们就可以去网上下载一个zookeeper,解压后进入目录如下:
进入其中的bin目录运行zkServer.cmd文件即可
这个时候已经进行了一半了,为了我们更加直观的观察我们需要安装一个提供者与消费者的控制台页面,这个案例中用的是dubbo-admin,当然也可以自行百度,运行了该控制页面后,就可以将案例中刚刚编写的dubbo-provider模块启动。启动类代码如下:
package com.it.ds;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class DubboProviderApplication {public static void main(String[] args) {SpringApplication.run(DubboProviderApplication.class, args);}}
@EnableDubbo该注解需要加上,只有加上它之前那个暴露服务的注解才能生效。启动好之后便可以去控制台页面查看结果了,如图:
这样一来我们的提供者算是完成了。
接下来便是需要编写消费者了,消费者同理创建一个springboot的模块,由于是案例只写了一个简单控制层,代码如下:
package com.it.ds.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.it.ds.model.User;
import com.it.ds.service.IUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;/*** @ClassName: UserController* @Description:* @Author: 盗帅* @Date: 2020/1/17 10:51*/
@Controller("user")
public class UserController {@ReferenceIUserService userService;@RequestMapping("getAll")@ResponseBodypublic List getAll(){return userService.getAll();}
}
注意里面有一个@Reference注解,这个注解功能便是从注册中心上调用对应的服务,而不再是@Autowired。接下来便是消费者的配置了。如下:
#服务名称
dubbo.application.name=dubbo-consumer
#指定注册中心的位置 protocol:指定协议
dubbo.registry.protocol=zookeeper
#address:指定地址
dubbo.registry.address=127.0.0.1:2181
#连接监控中心
dubbo.monitor.protocol=registryserver.port=8081
最后我们需要启动消费者,启动了中同样需要加上注解@EnableDubbo,启动类如下:
package com.it.ds;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo
@SpringBootApplication
public class DubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(DubboConsumerApplication.class, args);}}
启动消费者后,刷新控制页面,消费者便上来了,如图:
这个时候基本上就完成了,我们可以访问一下消费者对应的方法,便可以得到对应的数据了。如图: