springboot分佈式整合dubbo的方式

 Dubbo是Alibaba開源的分佈式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

1.服務提供者配置

//需要額外引入的jar包  提供者      
<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

spring配置方式

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

<dubbo:application name="user-service-provider"></dubbo:application>
    <!-- 指定註冊中心的地址,將來服務提供者要向註冊中心進行註冊-->
    <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
    <!-- 指定將來服務消費者消費我的時候使用的rpc協議 -->
    <dubbo:protocol name="dubbo" port="11123"></dubbo:protocol>
    <!-- 服務發佈 -->
    <bean id="userService" class="com.oracle.shop.user.service.impl.UserServiceImpl"></bean>
    <dubbo:service interface="com.oracle.shop.user.service.UserService" ref="userService"></dubbo:service>

</beans>

springboot配置方式

#dubbo的配置
#服務名
dubbo.application.name=user-provider
#註冊中心地址
dubbo.registry.address=zookeeper://192.168.192.3:2181
#使用的協議以及端口號
dubbo.protocol.name=dubbo
dubbo.protocol.port=11111

發佈服務的方式

在相應的實現類上添加註解

import com.alibaba.dubbo.config.annotation.Service;
import com.oracle.shopping.user.mapper.MenuMapper;
import com.oracle.shopping.user.po.Menu;
import com.oracle.shopping.user.service.MenuService;
import javax.annotation.Resource;
@Service  //dubbo的註解表示發佈該類
@org.springframework.stereotype.Service//spring的註解表示會在啟動時實例化該類
public class MenuServiceImpl implements MenuService {

    @Resource
    private MenuMapper menuMapper;

    @Override
    public int deleteByPrimaryKey(String id) {
        return menuMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insert(Menu record) {
        return menuMapper.insert(record);
    }

    @Override
    public int insertSelective(Menu record) {
        return menuMapper.insertSelective(record);
    }

    @Override
    public Menu selectByPrimaryKey(String id) {
        return menuMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(Menu record) {
        return menuMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Menu record) {
        return menuMapper.updateByPrimaryKey(record);
    }

}

啟動類中添加dubbo的掃包器,設置掃描路徑

@SpringBootApplication
@MapperScan("com.oracle.shopping.user.mapper")
@EnableTransactionManagement
@DubboComponentScan("com.oracle.shopping.user.service.impl")
public class UserProviderApp {

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

2.服務消費者訂閱

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

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

spring配置方式

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

<dubbo:application name="user-web-consumer"></dubbo:application>
    <!-- 指定註冊中心的地址,將來服務提供者要向註冊中心進行註冊-->
    <dubbo:registry address="zookeeper://192.168.192.3:2181"></dubbo:registry>
    <!-- 訂閱具體服務,讓dubbo幫咱們生成動態代理客戶端對象-->
    <dubbo:reference interface="com.oracle.shop.user.service.UserService" id="userService"></dubbo:reference>
    <dubbo:reference interface="com.oracle.shop.order.service.OrderService" id="orderService"></dubbo:reference>

</beans>

在controller中進行依賴註入和調用

@Controller
@RequestMapping("/user")
public class UserController {
    //通過動態代理的方式生成的動態代理類
    @Autowired(required = false)
    private UserService userService;
    //不進行檢查,防止報錯無法運行
    @Autowired(required = false)
    private OrderService orderService;


    @RequestMapping("/a")
    public @ResponseBody
    User detail(){
     return userService.findUserById(1);
    }

    @RequestMapping("/b")
    public @ResponseBody
    Orders details(){
        return orderService.findUserById(1);
    }

}

springboot配置方式

#指定自己的名稱
dubbo.application.name=user-consumer
#指定註冊中心的地址
dubbo.registry.address=zookeeper://192.168.192.3:2181

​在controller當中使用註解聲明要使用的服務(實現類)

@RestController
@RequestMapping("/user")
public class UserController {

    //表示要使用的服務
    @Reference(interfaceName = "com.oracle.shopping.user.service.UserService")
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;


    @RequestMapping("/detail")
    public User detail(String id){
        return userService.selectByPrimaryKey(id);
    }
}

啟動類中設置dobbo註解的掃描路徑

@SpringBootApplication
@DubboComponentScan("com.oracle.shopping.user.controller")
public class UserConsumerApp {

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

到此這篇關於springboot(分佈式)整合dubbo的文章就介紹到這瞭,更多相關springboot整合dubbo內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: