欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring/springboot整合dubbo詳細(xì)教程

 更新時(shí)間:2021年05月25日 09:43:42   作者:倪暢  
今天教大家如何使用spring/springboot整合dubbo,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴有很好地幫助,需要的朋友可以參考下

一、基本使用

需求:

某個(gè)電商系統(tǒng),訂單服務(wù)需要調(diào)用用戶服務(wù)獲取某個(gè)用戶的所有地址;
我們現(xiàn)在需要?jiǎng)?chuàng)建兩個(gè)服務(wù)模塊進(jìn)行測(cè)試

模塊 功能
訂單服務(wù)web模塊 創(chuàng)建訂單等
用戶服務(wù)service模塊 查詢用戶地址等

測(cè)試預(yù)期結(jié)果:
訂單服務(wù)web模塊在A服務(wù)器,用戶服務(wù)模塊在B服務(wù)器,A可以遠(yuǎn)程調(diào)用B的功能。

二、spring整合dubbo

以下使用XML 配置的方式,更多配置方式見(jiàn)官方文檔

2.1 spring-common模塊:

公共接口層(model,service,exception…),定義公共接口,也可以導(dǎo)入公共依賴

在這里插入圖片描述

UserAddress.java:用戶地址實(shí)體類(lèi)

public class UserAddress implements Serializable {
    private Integer id;
    private String userAddress;
    private String userId;
    private String consignee;
    private String phoneNum;
    private String isDefault;
	....
}

IOrderService.java:訂單接口

public interface IOrderService {
    /**
     * 用戶下單
     * @param userId
     */
    UserAddress placeOrder(int userId);
}

IUserService.java:用戶接口

public interface IUserService {
    /**
     * 根據(jù)用戶id獲取用戶地址
     * @param userId
     * @return
     */
    UserAddress getUserAddById(int userId);
}

pom.xml:通用的依賴,引入dubbo和zkclient

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>dubboStudy</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-common</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.10</version>
        </dependency>

        <!--zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>

</project>

2.2 spring-user模塊:

用戶業(yè)務(wù),作為服務(wù)提供者

在這里插入圖片描述

pom.xml:引入通用模塊,可以使用定義的接口

<dependency>
  <groupId>org.example</groupId>
  <artifactId>spring-common</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

UserServiceImpl.xml:IUserService的實(shí)現(xiàn)類(lèi),供遠(yuǎn)程調(diào)用

public class UserServiceImpl implements IUserService {

    @Override
    public UserAddress getUserAddById(int userId) {
        UserAddress userAddress = new UserAddress();
        userAddress.setUserAddress("上海市寶山區(qū)");
        return userAddress;
    }

}

provider.xml:dubbo配置信息

<?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.xsd
		http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--1、指定當(dāng)前服務(wù)/應(yīng)用的名字(同樣的服務(wù)名字相同,不要和別的服務(wù)同名)-->
    <dubbo:application name="spring-user"/>
    <!--2、指定注冊(cè)中心的位置-->
    <!--<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>-->
    <dubbo:registry address="zookeeper://192.168.31.136:2181"/>
    <!--3、指定通信規(guī)則(通信協(xié)議? 服務(wù)端口)-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--4、暴露服務(wù) 讓別人調(diào)用 ref指向服務(wù)的真正實(shí)現(xiàn)對(duì)象-->
    <bean id="userServiceImpl" class="me.nic.service.impl.UserServiceImpl"/>
    <!--服務(wù)的實(shí)現(xiàn)-->
    <dubbo:service interface="me.nic.service.IUserService" ref="userServiceImpl"/>

</beans>

ConsumerRun.java:?jiǎn)?dòng):

public class ConsumerRun {

    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
        IOrderService orderService = applicationContext.getBean(IOrderService.class);
        orderService.placeOrder(1);
        System.in.read();
    }
}

2.3 spring-order模塊:

訂單業(yè)務(wù),作為服務(wù)消費(fèi)者

在這里插入圖片描述

pom.xml:引入通用模塊,可以使用定義的接口,同1.2
OrderServiceImpl.xml:IOrderService的實(shí)現(xiàn)類(lèi),其中遠(yuǎn)程調(diào)用userService

@Service
public class OrderServiceImpl implements IOrderService {

    @Autowired
    private IUserService userService;

    @Override
    public UserAddress placeOrder(int userId) {
        // 遠(yuǎn)程調(diào)用,獲取用戶地址
        UserAddress userAddById = userService.getUserAddById(userId);
        // 下單
        System.out.println("用戶地址:" + userAddById.getUserAddress());
        System.out.println("下單成功");
        return null;
    }
}

consumer.xml:dubbo配置信息

<?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:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--包掃描-->
    <context:component-scan base-package="me.nic.service.impl"/>

    <!--指定當(dāng)前服務(wù)/應(yīng)用的名字(同樣的服務(wù)名字相同,不要和別的服務(wù)同名)-->
    <dubbo:application name="spring-order"/>

    <!--指定注冊(cè)中心的位置-->
    <dubbo:registry address="zookeeper://192.168.31.136:2181"/>

    <!--調(diào)用遠(yuǎn)程暴露的服務(wù),生成遠(yuǎn)程服務(wù)代理-->
    <dubbo:reference id="userService" interface="me.nic.service.IUserService"/>
</beans>

ProviderRun.java:?jiǎn)?dòng)

public class ProviderRun {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:provider.xml");
        System.in.read();
    }
}

2.4 效果

ProviderRun啟動(dòng)之后阻塞,
ConsumerRun啟動(dòng)之后調(diào)用orderService.placeOrder(1)placeOrder中遠(yuǎn)程調(diào)用spring-user模塊中的userService.getUserAddById(userId)獲取用戶地址:

用戶地址:上海市寶山區(qū)
下單成功

三、springboot整合dubbo

3.1 boot-common模塊:

公共接口層(model,service,exception…),定義公共接口,也可以導(dǎo)入公共依賴

在這里插入圖片描述

UserAddress.java:用戶地址實(shí)體類(lèi)

public class UserAddress implements Serializable {
    private Integer id;
    private String userAddress;
    private String userId;
    private String consignee;
    private String phoneNum;
    private String isDefault;
	....
}

IOrderService.java:訂單接口

public interface IOrderService {
    /**
     * 用戶下單
     * @param userId
     */
    UserAddress placeOrder(int userId);
}

IUserService.java:用戶接口

public interface IUserService {
    /**
     * 根據(jù)用戶id獲取用戶地址
     * @param userId
     * @return
     */
    UserAddress getUserAddById(int userId);
}

pom.xml:通用的依賴,引入dubbo的starter

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> 
    </parent>
    
    <groupId>com.example</groupId>
    <artifactId>boot-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot-common</name>
    
    <properties>
        <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    </dependencies>

</project>

3.2 boot-user模塊:

用戶業(yè)務(wù),作為服務(wù)提供者

在這里插入圖片描述

pom.xml:引入通用模塊,可以使用定義的接口

<dependency>
  <groupId>org.example</groupId>
  <artifactId>spring-common</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

UserServiceImpl.xml:IUserService的實(shí)現(xiàn)類(lèi),供遠(yuǎn)程調(diào)用
@Service 暴露dubbo的服務(wù)

@Service
@Component
public class UserServiceImpl implements IUserService {

    @Override
    public UserAddress getUserAddById(int userId) {
        UserAddress userAddress = new UserAddress();
        userAddress.setUserAddress("上海市寶山區(qū)");
        return userAddress;
    }

}

application.properties:dubbo配置信息

dubbo.application.name=boot-user
dubbo.registry.address=192.168.31.136:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

BootUserApplication.java:?jiǎn)?dòng):
@EnableDubbo : 開(kāi)啟基于注解的dubbo功能

@EnableDubbo
@SpringBootApplication
public class BootUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootUserApplication.class, args);
    }

}

3.3 boot-order模塊:

訂單業(yè)務(wù),作為服務(wù)消費(fèi)者

在這里插入圖片描述

pom.xml:引入通用模塊,可以使用定義的接口,同1.2

<dependency>
  <groupId>com.example</groupId>
  <artifactId>boot-common</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

OrderServiceImpl.xml:IOrderService的實(shí)現(xiàn)類(lèi),其中遠(yuǎn)程調(diào)用userService
@Reference:引用遠(yuǎn)程提供者服務(wù)

@Service
public class OrderServiceImpl implements IOrderService {

    //引用遠(yuǎn)程提供者服務(wù)
    @Reference
    private IUserService userService;

    @Override
    public UserAddress placeOrder(int userId) {
        // 遠(yuǎn)程調(diào)用,獲取用戶地址
        UserAddress userAddById = userService.getUserAddById(userId);
        return userAddById;
    }
}

OrderController.java:web接口,調(diào)用OrderService:

@Controller
public class OrderController {
    @Autowired
    IOrderService orderService;

    @RequestMapping("/initOrder")
    @ResponseBody
    public UserAddress initOrder(@RequestParam("uid")int userId) {
        return orderService.placeOrder(userId);
    }
}

application.properties:dubbo配置信息

server.port=8081
dubbo.application.name=boot-order
dubbo.registry.address=zookeeper://192.168.31.136:2181

BootOrderApplication.java:?jiǎn)?dòng)

@EnableDubbo
@SpringBootApplication
public class BootOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootOrderApplication.class, args);
    }

}

3.4 效果

在這里插入圖片描述

到此這篇關(guān)于springboot整合dubbo詳細(xì)教程的文章就介紹到這了,更多相關(guān)springboot整合dubbo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL返回Map集合或者對(duì)象的操作

    SQL返回Map集合或者對(duì)象的操作

    這篇文章主要介紹了SQL返回Map集合或者對(duì)象的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java設(shè)計(jì)模式之觀察者模式解析

    Java設(shè)計(jì)模式之觀察者模式解析

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式解析,觀察者模式,又被稱(chēng)為發(fā)布/訂閱模式,它定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己,需要的朋友可以參考下
    2023-09-09
  • Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決

    Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決

    這篇文章主要介紹了Mybatis報(bào)錯(cuò)mapkey is required問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之HashMap和HashSet

    Java數(shù)據(jù)結(jié)構(gòu)之HashMap和HashSet

    這篇文章主要介紹了HashMap和HashSet,什么是哈希表以及HashMap的部分源碼解讀,想了解更多的小伙伴,可以參考閱讀本文
    2023-03-03
  • java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Mybatis 中 Oracle 的拼接模糊查詢及用法詳解

    Mybatis 中 Oracle 的拼接模糊查詢及用法詳解

    這篇文章主要介紹了Mybatis 中 Oracle 的拼接模糊查詢及用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • SpringCloud Zuul實(shí)現(xiàn)動(dòng)態(tài)路由

    SpringCloud Zuul實(shí)現(xiàn)動(dòng)態(tài)路由

    這篇文章主要介紹了SpringCloud Zuul實(shí)現(xiàn)動(dòng)態(tài)路由,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java文件(io)編程之記事本開(kāi)發(fā)詳解

    Java文件(io)編程之記事本開(kāi)發(fā)詳解

    這篇文章主要為大家詳細(xì)介紹了Java文件(io)編程之記事本開(kāi)發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java?shiro安全框架使用介紹

    Java?shiro安全框架使用介紹

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會(huì)發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會(huì)出現(xiàn)問(wèn)題,這篇文章主要介紹了SpringBoot安全管理Shiro框架的使用
    2022-08-08
  • 詳解mybatis-plus的 mapper.xml 路徑配置的坑

    詳解mybatis-plus的 mapper.xml 路徑配置的坑

    這篇文章主要介紹了詳解mybatis-plus的 mapper.xml 路徑配置的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論