前言:
在maven的中央仓库我们可以找到两个springboot dubbo的依赖,他们分别是两个版本:
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
在两个都有使用,里面有一些具体的区别,我都做了尝试.
经过查阅得知,2.0.0是alibaba/dubbo-spring-boot-starter,阿里捐给apache后,后者也有一个项目
apache/incubator-dubbo,目前来看,后者最近一次更新距离现在更近,所以我认为大家可以优先考虑使用 apache的项目,大家也可以参考官方给的demo.地址如下:
https://github.com/apache/incubator-dubbo
2.0.0版本
1.先写API接口
它不需要其余的依赖,只是用来作为接口被调用(简单的maven项目)
package com.dubbo.service;
import com.dubbo.model.User;
public interface UserService {
public String sayHi(String name);
public User getUser(int id);
}
package com.dubbo.model;
public class User {
Integer id;
String username;
String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
2.provider:
依赖:
<dependency>
<groupId>com.demo</groupId>
<artifactId>07-springboot-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
//api的jar包,运行前先 打包api项目
</dependency>
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
配置文件:
spring.application.name=dubbo-spring-boot-starter
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://127.0.0.1:2181
server.port=8081
service层:
package com.demo.provider.service.impl;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.model.User;
import com.dubbo.service.UserService;
@Component
@Service(
interfaceClass=UserService.class
)
public class UserServiceImpl implements UserService{
@Override
public User getUser(int id) {
return null;
}
@Override
public String sayHi(String name) {
// TODO Auto-generated method stub
return "hello dubbo";
}
}
在springboot启动入口加入注解扫描dubbo的service服务(也可以使用非web启动模式,下面有用到):
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
@EnableDubboConfiguration//引入:2.0.0依赖,里面可以使用该注解,自动扫描dubbo的service服务
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
先用(maven install )打包api项目,再启动provide项目,成功截图:
3.consumer
核心配置:
spring.application.name=dubbo-consumer-starter
controller:
package com.demo.consumer.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.UserService;
@Controller
public class UserController {
@Reference(
version="1.0.0",url = "dubbo://127.0.0.1:20880")
private UserService userService;
@ResponseBody
@RequestMapping("/hello")
public Object hello() {
return userService.sayHi("aaaaa");
}
}
运行consumer截图:
4.访问http://localhost:8080/hello
**
0.2.0
**
1.provider:
启动类:
package com.demo;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(DubboProviderApplication.class)
.web(WebApplicationType.NONE)
.run(args);
}
}
核心配置文件:
# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090
# Service version
demo.service.version = 1.0.0
# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages = com.demo.provider.service
# Dubbo Config properties
## ApplicationConfig Bean
#提供发应用名称,用于计算依赖关系
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo
## ProtocolConfig Bean
#使用dubbo协议,在12345端口暴露服务
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
## RegistryConfig Bean
#使用zookeeper注册中心暴露服务地址
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181
#dubbo.registry.address = N/A
service:
package com.demo.provider.service.impl;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.model.User;
import com.dubbo.service.UserService;
@Component
@Service(
version = "${demo.service.version}",
application = "${dubbo.application.id}",
protocol = "${dubbo.protocol.id}",
registry = "${dubbo.registry.id}"
)
public class UserServiceImpl implements UserService{
@Override
public User getUser(int id) {
return null;
}
@Override
public String sayHi(String name) {
// TODO Auto-generated method stub
return "hello dubbo";
}
}
先开启zookeeper服务,再开启dubbo-admin项目,运行provider
附dubbo-admin教程:https://blog.csdn.net/ZzzPaul/article/details/82315287
2.consumer:
核心配置文件
# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 8080
# Service Version
demo.service.version = 1.0.0
#dubbo.scan.basePackages = com.demo.consumer.controller
# Dubbo Config properties
## ApplicationConfig Bean消费方应用名称,用于计算依赖关系,不是匹配条件,不能和提供方名称一样
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo
dubbo.registry.address = zookeeper://127.0.0.1:2181
dubbo.registry.check=false
## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 12345
controller
package com.demo.consumer.controller;
import java.io.IOException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.UserService;
@Controller
public class UserController {
@Reference(version = "${demo.service.version}")
private UserService userService;
@ResponseBody
@RequestMapping("/hello")
public Object hello() throws IOException {
String a= userService.sayHi("aaaaa");
return a;
}
}
运行: