前言:
在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;
}
}
運行: