spring整合dubbo服务消费和发现入门示例
生活随笔
收集整理的這篇文章主要介紹了
spring整合dubbo服务消费和发现入门示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 準備
- 公共接口部分
- 服務提供
- 服務消費
準備
1.啟動zookeeper
目錄
其中interface包下是公共接口
測試預期結果:
訂單服務web模塊在A服務器,用戶服務模塊在B服務器,A可以遠程調用B的功能。
公共接口部分
public class UserAddress implements Serializable {private Integer id;private String userAddress; //用戶地址private String userId; //用戶idprivate String consignee; //收貨人private String phoneNum; //電話號碼private String isDefault; //是否為默認地址 Y-是 N-否public UserAddress() {super();// TODO Auto-generated constructor stub}public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,String isDefault) {super();this.id = id;this.userAddress = userAddress;this.userId = userId;this.consignee = consignee;this.phoneNum = phoneNum;this.isDefault = isDefault;}//省略get set方法} public interface OrderService {/*** 初始化訂單* @param userId*/public List<UserAddress> initOrder(String userId);} public interface UserService {/*** 按照用戶id返回所有的收貨地址* @param userId* @return*/public List<UserAddress> getUserAddressList(String userId);}然后mvn package進行打包,可以看到target目錄下生成的jar包:
服務提供
provider.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 1、指定當前服務/應用的名字(同樣的服務名字相同,不要和別的服務同名) --><dubbo:application name="user-service-provider"></dubbo:application><!-- 2、指定注冊中心的位置 --><!-- <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry> --><dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry><!-- 3、指定通信規則(通信協議?通信端口) --><dubbo:protocol name="dubbo" port="20882"></dubbo:protocol><!-- 4、暴露服務 ref:指向服務的真正的實現對象 --><dubbo:service interface="com.dubbo.service.UserService"ref="userServiceImpl01" timeout="1000" version="1.0.0"><dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method></dubbo:service><!--統一設置服務提供方的規則 --><dubbo:provider timeout="1000"></dubbo:provider><!-- 服務的實現 --><bean id="userServiceImpl01" class="com.dubbo.bean.service.impl.UserServiceImpl"></bean><dubbo:service interface="com.dubbo.service.UserService"ref="userServiceImpl02" timeout="1000" version="2.0.0"><dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method></dubbo:service><bean id="userServiceImpl02" class="com.dubbo.bean.service.impl.UserServiceImpl2"></bean><!-- 連接監控中心 --><dubbo:monitor protocol="registry"></dubbo:monitor></beans> public class UserServiceImpl implements UserService {@Overridepublic List<UserAddress> getUserAddressList(String userId) {System.out.println("UserServiceImpl.....old...");// TODO Auto-generated method stubUserAddress address1 = new UserAddress(1, "北京市昌平區宏福科技園綜合樓3層", "1", "李老師", "010-56253825", "Y");UserAddress address2 = new UserAddress(2, "深圳市寶安區西部硅谷大廈B座3層(深圳分校)", "1", "王老師", "010-56253825", "N");/*try {Thread.sleep(4000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}*/return Arrays.asList(address1,address2);}} public class UserServiceImpl2 implements UserService {@Overridepublic List<UserAddress> getUserAddressList(String userId) {System.out.println("UserServiceImpl.....new...");// TODO Auto-generated method stubUserAddress address1 = new UserAddress(1, "北京市昌平區宏福科技園綜合樓3層", "1", "李老師", "010-56253825", "Y");UserAddress address2 = new UserAddress(2, "深圳市寶安區西部硅谷大廈B座3層(深圳分校)", "1", "王老師", "010-56253825", "N");return Arrays.asList(address1,address2);}}主啟動類:
public class MainApplication {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("provider.xml");ioc.start();System.in.read();}}服務消費
consumer.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><context:component-scan base-package="com.dubbo.bean.service.impl"></context:component-scan><dubbo:application name="order-service-consumer"></dubbo:application><dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry><!-- 配置本地存根--><!--聲明需要調用的遠程服務的接口;生成遠程服務代理 --><!-- 1)、精確優先 (方法級優先,接口級次之,全局配置再次之)2)、消費者設置優先(如果級別一樣,則消費方優先,提供方次之)--><!-- timeout="0" 默認是1000ms--><!-- retries="":重試次數,不包含第一次調用,0代表不重試--><!-- 冪等(設置重試次數)【查詢、刪除、修改】、非冪等(不能設置重試次數)【新增】 --><dubbo:reference interface="com.dubbo.service.UserService"id="userService" timeout="5000" retries="3" version="*"><!-- <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> --></dubbo:reference><!-- 配置當前消費者的統一規則:所有的服務都不檢查 --><dubbo:consumer check="false" timeout="5000"></dubbo:consumer><dubbo:monitor protocol="registry"></dubbo:monitor><!-- <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor> --></beans> /*** 1、將服務提供者注冊到注冊中心(暴露服務)* 1)、導入dubbo依賴(2.6.2)\操作zookeeper的客戶端(curator)* 2)、配置服務提供者* * 2、讓服務消費者去注冊中心訂閱服務提供者的服務地址* @author lfy**/ @Service public class OrderServiceImpl implements OrderService {@AutowiredUserService userService;@Overridepublic List<UserAddress> initOrder(String userId) {// TODO Auto-generated method stubSystem.out.println("用戶id:"+userId);//1、查詢用戶的收貨地址List<UserAddress> addressList = userService.getUserAddressList(userId);for (UserAddress userAddress : addressList) {System.out.println(userAddress.getUserAddress());}return addressList;}}這里 @Autowired導入的UserService 是公共接口中的UserService
主啟動類
public class MainApplication {@SuppressWarnings("resource")public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");OrderService orderService = applicationContext.getBean(OrderService.class);orderService.initOrder("1");System.out.println("調用完成....");System.in.read();}}啟動服務提供者再啟動服務消費者結果:
訪問initOrder請求,會調用UserService獲取用戶地址;
調用成功。說明我們order已經可以調用遠程的UserService了;
總結
以上是生活随笔為你收集整理的spring整合dubbo服务消费和发现入门示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springsecurity实现自定义S
- 下一篇: 查看动态代理生成的代理类字节码