第一次我们简单使用dubbo,做一个服务的RPC调用,下一节我们使用nacos进行注册
1.引入maven依赖,放到根目录下
<!--可选 -->
<dependency>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-serialization-kryo</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.1.8</version>
</dependency>
注意选择兼容的版本。kryo作为序列化工具,因为dobbo能够做一些参数传递,对象的序列化很重要,不过默认的序列化方案Hessian也是可以的,选择默认就不要加第一个依赖。
2.创建公共模块,消费者和生产者
借下之前的rocketmq模块测试,如下:
api:存放Dubbo 服务定义,和公共类等两个需要共用的代码
consumer:用于调用服务
producer:用于提供服务实现
3个模块的springboot相关依赖自行添加,注意只有consumer和producer才要启动类,api创建一个包即可
3.在api里面添加接口
public interface DemoService {
String say(String arg);
String eat(String arg1,String arg2);
}
4.编写服务提供者producer
yml配置文件中加上
#随便命名
spring:
application:
name: DUBBO-PRODUCER
dubbo:
protocol:
name: dubbo
port: -1
protocol是网络协议,这边使用dubbo的网络协议,大概是网址前面的https:变成dubbo:
编写实现类
注意@DubboService,这样才能让dubbo管理到
@DubboService
public class DemoServiceImpl implements DemoService {
@Override
public String say(String arg) {
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("service说了:");
stringBuilder.append(arg);
return stringBuilder.toString();
}
@Override
public String eat(String arg1, String arg2) {
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append(arg1);
stringBuilder.append(" 吃了 ");
stringBuilder.append(arg2);
return stringBuilder.toString();
}
}
最后在启动类加上@EnableDubbo
@EnableSwagger2
@EnableDubbo
@SpringBootApplication
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
启动!
可以看到dubbo的代理网址,RPC成功,如果显示没有某个类,那么可能你的dubbo版本依赖和springboot不匹配,适当修改即可
4.编写服务调用者
一样先写yml
server:
port: 8093
spring:
application:
name: DUBBO-CONSUMER
dubbo:
application:
qos-enable: false
写一个控制层接口,把刚才的代理网址抄上去
@RestController
public class DemoConsumer {
@DubboReference(url = "dubbo://192.168.182.1:20880/com.lgt.api.testApi.DemoService")
private DemoService demoService;
@GetMapping("/say")
public String sayAny(@RequestParam String arg){
String result=demoService.say(arg);
return result;
}
@GetMapping("/eat")
String eat(@RequestParam String who,String food){
String result=demoService.eat(who,food);
return result;
}
}
启动!
5.调用服务
启动swagger文档管理或者postman,发送请求调用,
下节我们试着把nacos和dubbo联系在一起作为注册中心,当然以前的zookeeper也是可以的,不过nacos功能更强大。