- 服务提供者(包括服务实现类和接口)需要将自己的“服务接口类”暴露出来
- 需要配置引入 jar 包的依赖
- 可以将服务提供者和消费者之间公共的 bean 和 service 接口暴露出来
- 在 IDEA 中配置时,只需要在“父项目”中配置 pom.xml 即可
依赖
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<version>2.6.2version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.3.16.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-recipesartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>com.101tecgroupId>
<artifactId>zkclientartifactId>
<version>0.10version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>2.12.0version>
dependency>
<dependency>
<groupId>com.bigguy.servicegroupId>
<artifactId>service-interfaceartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
dependencies>
接口
public interface UserService {
public String sayHello();
}
接口实现类
public class UserServiceImpl implements UserService {
@Override
public String sayHello() {
return "hello , bigguy!";
}
}
配置文件
<dubbo:application name="service-app" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.bigguy.service.UserService" ref="demoService" />
<bean id="demoService" class="com.bigguy.service.UserServiceImpl" />
beans>
测试方法
public class MainApp {
public static void main(String args[]) throws IOException {
String xmlPath = "classpath:context.xml";
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
context.start();
System.in.read(); // 按任意键退出
}
}
- 只需要编写接口类(UserService,这个接口类和服务提供者一致),实现从 zookeeper 中获取
配置文件
<dubbo:application name="consumer-of-helloworld-app" />
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:reference id="demoService" interface="com.bigguy.service.UserService" />
beans>
测试方法
public class ConsumerMainApp {
public static void main(String args[]) throws IOException {
String xmlPath = "classpath:context.xml";
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(xmlPath);
UserService service = context.getBean(UserService.class);
// UserService service = (UserService)context.getBean("demoService");
String str = service.sayHello();
System.out.println(str);
System.in.read();
}
}
在 github 中搜索可以得到
https://github.com/apache/incubator-dubbo-spring-boot-project
<dependency>
<groupId>com.alibaba.bootgroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>0.1.1version>
dependency>
dubbo.application.name=service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
@Service // 使用的是 dubbo 的 service 注解
@Component
public class UserServiceImpl implements UserService {
public User getUserById(Integer id) {
return new User(1,"jeck");
}
}
@EnableDubbo // 开启基于注解的dubbo
@SpringBootApplication
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
}
server.port=8081
dubbo.application.name=service-consumer
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
@Reference 引用 service
@Controller
public class UserController {
@Reference // 使用 dubbo 的reference
UserService service;
@ResponseBody
@GetMapping("user")
public User getUser(){
User user = service.getUserById(1);
return user;
}
@EnableDubbo // 开启基于注解的 dubbo
@SpringBootApplication
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
}
**参考地址:**https://github.com/alibaba/dubbo-spring-boot-starter
- 不用继承父springboot 方式
<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.0modelVersion>
<groupId>com.bigguy.framegroupId>
<artifactId>frame-client-providerartifactId>
<version>1.0-SNAPSHOTversion>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>1.4.3.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.spring.bootgroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>2.0.0version>
dependency>
<dependency>
<groupId>com.101tecgroupId>
<artifactId>zkclientartifactId>
<version>0.10version>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
exclusion>
<exclusion>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
exclusion>
exclusions>
dependency>
dependencies>
project>
spring.application.name=dubbo-spring-boot-starter
spring.dubbo.server=true
# 表示不使用 zookeeper 等服务中心
spring.dubbo.registry=N/A
使用 Dubbo 的注解 Service
@Service(interfaceClass = IHelloService.class)
@Component
public class HelloServiceImpl implements IHelloService {
//...
}
- 启动Dubbo
@SpringBootApplication
@EnableDubboConfiguration
public class FrameConsumerApp {
public static void main(String[] args) {
SpringApplication.run(FrameConsumerApp.class, args);
}
}
- 和服务提供者的pom一致
@Reference(url = “dubbo://127.0.0.1:20880”) ,在 Reference 中指定连接的 url
@Component
public class HelloConsumer {
@Reference(url = "dubbo://127.0.0.1:20880")
private IHelloService iHelloService;
}
@SpringBootApplication
@EnableDubboConfiguration
public class FrameConsumerApp {
public static void main(String[] args) {
SpringApplication.run(FrameConsumerApp.class, args);
}
}
参考地址:https://www.cnblogs.com/Alandre/p/6490142.html
server.port=8081
server.context-path=/
spring.application.name=dubbo-spring-boot-starter
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://172.30.0.177:2181
server.port=8080
spring.application.name=dubbo-spring-boot-starter-consumer
spring.dubbo.registry.address=zookeeper://172.30.0.177:2181
spring.dubbo.scan=org.spring.springboot.dubbo