SpringBoot學習之路---SpringBoot、Dubbo、Zookeeper整合

承接上文,介紹了DubboZookeeper之後,這一篇博客就來記錄一下怎麼在SpringBoot項目中整合它們。


首先因爲Dubbo的架構設計,有服務提供者(provider)服務消費者(consumer),那我們可以創建一個空項目,並往裏面加入兩個子模塊,一個叫provider_ticket,另外一個是consumer_user。由前者提供服務,並註冊到Zookeeper中,後者訂閱Zookeeper,收到通知後遠程調用前者完成業務。大致業務邏輯就是這樣。

現在開始行動吧,項目創建好之後:

在這裏插入圖片描述

Dubbo內部還是有挺多組件的,如果在以往的SSM項目中,我們會在配置文件中,配置很多<bean>組件,但好在SpringBoot的優勢,它會爲我們自動導入各種組件,我們只需要在兩個模塊中都引入Dubbostarter即可:

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

當然這還不夠,因爲還需要註冊中心Zookeeper,這裏引入它的客戶端zkclient即可:

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>

接下來就可以編寫代碼了,我們先來編寫服務提供者的代碼.

provider_ticket:

編寫一個TicketService接口,其中有一個getTicket()方法,並編寫一個類去實現它:

TicketServiceImpl中實現該方法:

public class TicketServiceImpl implements TicketService {

    @Override
    public String getTicket() {
        return "《霸王別姬》";
    }
}

接下來,需要把該服務註冊到Zookeeper中去,在TicketServiceImpl類上添加兩個註解:

@Service
@Component

特別注意,@Servicealibaba那個包的註解,不要導成Spring的了,@Component就不用說了,添加類到容器中。

之後註冊服務,還差最後一步,我們還需要在全局配置文件中 (application.yaml) 配置一些屬性,服務提供者的名稱,註冊中心的ip地址和服務所在包下:

dubbo:
  application:
    name: provider_ticket
  registry:
    address: zookeeper://localhost:2181 //注意是zookeeper協議,後面加上你安裝zookeeper的主機ip地址,端口號爲2181
  scan:
    base-packages: com.leslie.provider_ticket.service.impl

註冊服務到註冊中心完成啦,接下來啓動程序,並保持該模塊不中斷。項目啓動後可以在控制檯上看到比較帥氣的界面:
在這裏插入圖片描述
接下來就是服務消費者的代碼編寫了。

consumer_user:

項目基本結構還是和provider_ticket相同:

在這裏插入圖片描述

接口內有一個方法buyTicket(),實現類中實現它,這裏代碼稍後再放。

在該模塊中,我們需要遠程調用provider_ticket模塊的方法,我們需要在此模塊(consumer_user)創建一個和上一個模塊(provider_ticket)一模一樣的項目結構(有點繞),直接看看創建完成之後的結構:

在這裏插入圖片描述

說白了就是創建一個TicketService接口的全限定類名的包結構。(別問,我也不知道爲什麼…)

之後就可以遠程調用了,我們需要在UserServiceImpl類中編寫代碼:

@Service
public class UserServiceImpl implements UserService {
    
    @Reference
    private TicketService ticketService;
    
    @Override
    public void buyTicket() {
        System.out.println("買到票了:"+ticketService.getTicket());
    }
}

注意,這裏@Service是Spring包下的註解,@Referencealibaba包下的註解,之後編寫測試代碼運行,再次注意,provider_ticket模塊的服務器程序不能關閉!!!

在此之前,別忘了consumer_user模塊的全局配置文件也是需要配置的:

dubbo:
  application:
    name: consumer_user
  registry:
    address: zookeeper://localhost:2181

還有一點,需要在兩個啓動類上加入@EnableDubbo註解。

測試代碼:

@SpringBootTest
class ConsumerUserApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {

        userService.buyTicket();
    }
}

運行結果:

在這裏插入圖片描述

成功運行~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章