代码地址

https://gitee.com/zjj19941/ZJJ_Dubbo.git

看dubbo-start-demo项目即可

搭建zookeeper

自己去博客随便弄个zookeeper安装教程.,然后启动起来

或者看我的博客,用docker快速搭建一个zookeeper起来,

https://blog.csdn.net/qq_41489540/article/details/109129293

pom文件

自己去我码云项目看一下,我就不粘贴了

https://gitee.com/zjj19941/ZJJ_Dubbo.git

看dubbo-start-demo项目即可

interface项目

DemoService

  1. package com.zjj;
  2. public interface DemoService {
  3. // 同步调用方法
  4. String sayHello(String name);
  5. }

服务的提供者

properties文件

  1. # Spring boot application
  2. spring.application.name=dubbo-provider-demo
  3. server.port=8081
  4. # Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
  5. #这个配置是扫描带有@org.apache.dubbo.config.annotation.Service注解的类,如果有的话,就解析这个注解的类
  6. #将配置信息进行处理,最后放到注册中心上面去.
  7. #你在类上面定义注解是没有用的,你得有配套的逻辑去识别定义这个注解的类
  8. #然后做一些别的处理
  9. dubbo.scan.base-packages=com.zjj.provider.service
  10. # dubbo需要定义你的应用名字
  11. dubbo.application.name=${spring.application.name}
  12. ## Dubbo 注册的注册中心地址
  13. dubbo.registry.address=zookeeper://zjj101:2181
  14. # Dubbo 协议定义,这个是属于应用级别的 ,配置你这个应用 用什么协议
  15. dubbo.protocol.name=dubbo
  16. dubbo.protocol.port=20880
  17. #dubbo.protocol.name=rest
  18. #dubbo.protocol.port=8083

提供服务的实现类

  1. package com.zjj.provider.service;
  2. import com.zjj.DemoService;
  3. import org.apache.dubbo.common.URL;
  4. import org.apache.dubbo.config.annotation.Service;
  5. import org.apache.dubbo.rpc.RpcContext;
  6. @Service(version = "default")
  7. public class DefaultDemoService implements DemoService {
  8. @Override
  9. public String sayHello(String name) {
  10. System.out.println("执行了服务" + name);
  11. URL url = RpcContext.getContext().getUrl();
  12. return String.format("%s:%s, Hello, %s", url.getProtocol(), url.getPort(), name); // 正常访问
  13. }
  14. }

启动类

  1. package com.zjj;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class DubboProviderDemo {
  6. public static void main(String[] args) {
  7. SpringApplication.run(DubboProviderDemo.class, args);
  8. }
  9. }

服务的消费者

配置文件

  1. spring:
  2. application:
  3. name: dubbo-consumer-demo
  4. server:
  5. port: 8082
  6. dubbo:
  7. registry:
  8. address: zookeeper://zjj101:2181

启动类

  1. package com.zjj;
  2. import org.apache.dubbo.config.annotation.Reference;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.context.ConfigurableApplicationContext;
  6. @SpringBootApplication
  7. public class DubboConsumerDemo {
  8. //@Reference注解就是用于标记这个服务具体使用了生产者的哪个接口实现
  9. @Reference(version = "default")
  10. private DemoService demoService;
  11. public static void main(String[] args) {
  12. ConfigurableApplicationContext context = SpringApplication.run(DubboConsumerDemo.class);
  13. DemoService demoService = context.getBean(DemoService.class);
  14. System.out.println((demoService.sayHello("你好")));
  15. }
  16. }

开始测试

先启动服务的提供者项目 ,再启动服务的消费者, 然后控制台就能看到,说明服务的消费者已经访问到了服务的发起方了.

  1. dubbo20880, Hello, 你好

查看zookeeper,你会发现这个服务被注册到了注册中心上

image.png