1.添加dubbo-spring-boot-starter依賴
<!-- dubbo依賴 --> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
2.添加zookeeper依賴
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
3.添加zkclient依賴
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
4.新建個普通的java工程,用來定義服務(API接口),如下:
package com.example.dubboTestApi.api; public interface SayHelloApi { String say(String name); }
5.新建一個springboot類型的服務實現工程,具體見springboot創建功能文章
6.配置文件修改:
#WEB服務端口
server.port=8081
## dubbo 配置
spring.dubbo.application.id=live-dubbo-provider
spring.dubbo.application.name=live-dubbo-provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
7.啟動類修改,增加@EnableDubboConfiguration注解
@EnableDubboConfiguration @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
8.服務實現,先添加API接口依賴
<dependency> <groupId>com.example.dubboTestApi</groupId> <artifactId>dubboTestApi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
注意這里加了一個retries = 0,默認情況下超時時dubbo會自動重掉三次,這樣的重復調用很容易導致一些問題,所以這里用retries = 0來關閉超時重試功能。
@Service(interfaceClass = SayHelloApi.class,retries = 0) @Component public class SayHelloApiService implements SayHelloApi{ @Override public String say(String name) { if(StringUtils.isBlank(name)){ return "error,name is blank"; } return name + ",hello dubbo api"; } }
9.新建一個springboot類型的服務調用工程,具體見springboot創建功能文章
10.添加dubbo,zookeeper,zkclient相關依賴。
11.配置文件修改
## WEB服務端口
server.port=8082
## Dubbo 配置
spring.dubbo.application.name=live-dubbo-consumer
spring.dubbo.application.id=live-dubbo-consumer
spring.dubbo.protocol.port=20800
spring.dubbo.protocol.name=dubbo
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
12.修改啟類:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; @EnableDubboConfiguration @SpringBootApplication public class DubboConsumerTestApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerTestApplication.class, args); } }
13.添加api接口依賴
<dependency> <groupId>com.example.dubboTestApi</groupId> <artifactId>dubboTestApi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
14.創建使用api例子
import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Reference; import com.example.dubboTestApi.api.SayHelloApi; @Component public class DubboConsumerTest { @Reference private SayHelloApi sayHelloApi; public String testSay(){ System.out.println(sayHelloApi.say("dubbo")); return "dubbo test success"; } }
15.另外,為了便於理解,上面分成三個項目,API定義,服務提供,服務消費 。但是一個應用,既可以提供服務,也可以調用其他項目提供的服務。,一般也是這樣的情況。
16.注意事項
默認情況下,服務端沒啟動,消費端是不能啟動的。可以配置一下讓消費端啟動的時候不去檢查服務是否存在。
spring.dubbo.reference.check=false
另外,dubbo默認超時會重試兩次,這樣的重試有時會產生很大問題,所以建議關閉。關閉有兩種方式:
在服務上加注解:
@Service(interfaceClass = AccountUpdateApi.class,retries = -1)
注意這里重試次數寫成-1,經測試,dubbo版本(2.6.0)寫成0無效。
另一種方式,配置文件:
spring.dubbo.provider.retries=-1
17.安裝dubbo admin后(安裝非常簡單,直接將war包放在tomcat下運行即可),可以在頁面查看服務情況
需要項目代碼,可以發郵件zhuyuehua110@163.com