項目
新建一個項目,裏面建三個Module分別代表暴露接口、服務提供者、消費者
引用依賴
- springboot
在consumer提供者項目引用pom依賴
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
- springmvc
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
生產者
在interface中寫幾個接口,並有consumer項目實現這個接口
實現類需要注入@service(使用dubbo的包)和@component實現類代碼如下:
import com.alibaba.dubbo.config.annotation.Service;
import com.zang.gmall.bean.UserAddress;
import com.zang.gmall.service.UserService;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Service //屬於Dubbo的@Service註解,非Spring 作用:暴露服務
@Component
public class UserServiceImpl implements UserService {
@Override
public List<UserAddress> getUserAddressList(String userId) {
//省略
}
}
生產者配置application.properties
## dubbo
#當前服務/應用的名字
dubbo.application.name=user-service-provider
#註冊中心的協議和地址
dubbo.registry.protocol=zookeeper
dubbo.registry.address=IP:2181
#通信規則(通信協議和接口)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#連接監控中心
dubbo.monitor.protocol=registry
- 如果是mvc項目需要一個xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 應用信息,用於計算依賴關係 -->
<dubbo:application name="authorizationManagement-web"/>
<dubbo:protocol name="dubbo" port="20870"/>
<!-- 使用zookeeper註冊中心暴露服務地址 -->
<dubbo:registry protocol="zookeeper" address="IP:2181" register="true"/>
<!-- 不需要依賴註冊中心 -->
<!-- <dubbo:registry address="N/A"/> -->
<!-- 需要暴露包地址 -->
<dubbo:service interface="暴露接口包路徑" ref="helloService"/>
<bean id="helloService" class="暴露實現包接口路徑"/>
<dubbo:provider timeout="300000" group="local"/>
<dubbo:consumer check="false" timeout="300000" group="local"/>
</beans>
並在啓動類上加@EnableDubbo註解
消費者配置文件
和提供者引用的引用pom一樣
#避免和監控中心端口衝突,設爲8081端口訪問
server.port=8081
dubbo.application.name=order-service-consumer
dubbo.registry.address=zookeeper://IP:2181
dubbo.monitor.protocol=registry
- 如果是mvc項目需要一個xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 應用信息,用於計算依賴關係 -->
<dubbo:application name="dubbo-client"/>
<dubbo:protocol name="dubbo" port="20870"/>
<!-- 使用zookeeper註冊中心暴露服務地址 -->
<!-- <dubbo:registry protocol="zookeeper" address="IP:2181" register="true"/>-->
<!-- 不需要依賴註冊中心 -->
<!-- <dubbo:registry address="N/A"/> -->
<!-- <!– 需要暴露包地址 -->
<dubbo:reference id="helloService" interface="引用服務提供者暴露接口包路徑"/>
<!-- <!– 需要暴露包地址,不需要依賴註冊中心添加url -->
<!-- <dubbo:reference id="helloService" interface="引用服務提供者暴露接口包路徑" url="dubbo://192.168.20.236:20870/服務提供者暴露接口包路徑"/> -->
</beans>
需要引用dubbo服務採用注入方式。
import com.alibaba.dubbo.config.annotation.Reference;
import com.zang.gmall.bean.UserAddress;
import com.zang.gmall.service.OrderService;
import com.zang.gmall.service.UserService;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class OrderServiceImpl implements OrderService {
@Reference
UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
//代碼省略
}
}
在啓動類添加@EnableDubbo註解