青岛队建网站新闻头条最新消息
文章目录
- 一、生产者工程
- 0.目录结构
- 1.依赖
- 2.配置文件
- 3.启动类
- 4.生产者服务
- 二、消费者工程
- 0.目录结构
- 1.依赖
- 2.配置文件
- 3.启动类
- 4.服务接口
- 5.controller接口
- 三、测试代码
本博客配套源码:gitlab仓库
首先,在服务器上部署zookeeper并运行,可以参考我的另一篇教程:https://blog.csdn.net/Tracycoder/article/details/142792750
注意事项:
- 生产者、消费者中服务的包路径一定要一致,不然会导致注册和消费失败!
- 先启动生产者,再启动消费者!不然会启动失败!
- 各依赖的版本一定要兼容,不然项目会启动失败!
一定要注意以上几点,踩了几个小时的坑,说多了都是泪!
一、生产者工程
0.目录结构
1.依赖
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>dubbo_study_provider</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Dubbo Starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.0</version></dependency><!-- Zookeeper Client --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.4.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.4.0</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.29.2-GA</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery-server --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery-server</artifactId><version>5.4.0</version></dependency><!-- Spring Boot Test Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>
2.配置文件
applicaiton.yml
server:port: 8080# Dubbo
dubbo:application:name: dubbo_providerregistry:address: zookeeper://你的zookeeperIP:2181protocol:name: dubboport: 20880
3.启动类
package tracy;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo(scanBasePackages = "tracy.provider.service")
public class ProviderApplication {public static void main(String[] args) {System.setProperty("zookeeper.sasl.client", "false");SpringApplication.run(ProviderApplication.class, args);System.out.println("provider服务启动成功!!!");}
}
4.生产者服务
package tracy.provider.service;public interface HelloService {String sayHello(String name);
}
package tracy.provider.service;import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;@DubboService(version = "1.0.0")
@Component
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "hello "+name+"!";}
}
二、消费者工程
0.目录结构
1.依赖
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>dubbo_study_consumer</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Dubbo Starter --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.0</version></dependency><!-- Zookeeper Client --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.4.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.4.0</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.29.2-GA</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-x-discovery-server --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-x-discovery-server</artifactId><version>5.4.0</version></dependency><!-- Spring Boot Test Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>
2.配置文件
application.yml
server:port: 8081# Dubbo
dubbo:application:name: dubbo_consumerregistry:address: zookeeper://你的zookeeperIP:2181consumer:check: false # 设置为 false,避免消费者启动时检查提供者状态
3.启动类
package tracy;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {public static void main(String[] args) {System.setProperty("zookeeper.sasl.client", "false");SpringApplication.run(ConsumerApplication.class, args);System.out.println("consumer服务启动成功!!!");}
}
4.服务接口
package tracy.provider.service;public interface HelloService {String sayHello(String name);
}
5.controller接口
package tracy.controller;import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import tracy.provider.service.HelloService;@RestController
@RequestMapping("/hello")
public class HelloController {@DubboReference // 使用 DubboReference 注解引用远程服务private HelloService helloService;@GetMapping("/sayHello")public String sayHello(@RequestParam String name) {return helloService.sayHello(name);}
}
三、测试代码
先启动zookeeper,然后启动provider,最后启动consumer。
然后在接口测试工具中访问接口:
访问成功!