文档章节

SpringBoot整合dubbo

暗中观察
 暗中观察
发布于 2018/05/20 14:57
字数 758
阅读 2228
收藏 0

市面上大概是用两种方式使用微服务,①dubbo,②,springcloud;

dubbo是使用rpc进行服务调度,而springcloud是用轻量级的http方式;dobbo侧重于服务间通信,在负载均衡,网关,路由,熔断方面依赖于第三方,而springcloud则提供了一整套完整的解决方案。且zookeeper偏向于保证一致性,而springcloud 的eureka 是偏向于高可用的。

1,准备

①,docker安装zookeeper

#拉取zookeeper,使用镜像加速,否则很可能下载不下来
docker pull registry.docker-cn.com/library/zookeeper

#运行zookeeper镜像
#--name 指定容器名,-p 表示暴露的端口  --restart 自动重启 -d 后台运行,最后带上镜像id
docker run  --name zk -p 2181:2181 --restart always -d bf5cbc9d5cac

②,dubbo现在是apache的项目

官网地址:http://dubbo.apache.org/

③,点击view to GitHub,这里有springboot整合dubbo的详细说明

2,版本说明

这里以springboot的1.5x版本为例

3,项目结构

①,利用idea先创建一个空工程,然后给其添加,api模块,provide模块,customer模块

②,eclipse中直接创建一个类型为pom是父工程,然后右键父工程给其添加maven模块即可。

4,api模块

①,作用:用于定义公共的接口,给provider和customer依赖

②,pom.xml

<--用于构建项目--> 
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

③,定义一个买票接口

public interface TicketService {
    String buyTicket();
}

④,利用maven插件将api工程安装到maven仓库,供provider和customer依赖

⑤,双击install

⑥,当控制台输出BUILD SUCCESS,说明安装成功

5,provider配置

①,pom.xml

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--引入dubbo的场景启动器-->
	<dependency>
		<groupId>com.alibaba.boot</groupId>
		<artifactId>dubbo-spring-boot-starter</artifactId>
		<version>0.1.0</version>
	</dependency>
	<!-- 引入zookeeper的客户端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>

	<!--引入公共的api-->
	<dependency>
		<groupId>com.api</groupId>
		<artifactId>api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
</dependencies>

②,application.properties 配置

#应用名
dubbo.application.name=ticket-provider
#注册地址
dubbo.registry.address=zookeeper://192.168.43.28:2181
#需要扫描的包
dubbo.scan.base-packages=com.provider.ticketprovider.ticket.service.impl

③,编写提供者

import com.api.api.ticket.service.TicketService;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;

@Component
//这个是dobbo的Service 注解
@Service
public class TicketServiceImpl implements TicketService {
    @Override
    public String buyTicket() {
        return "《死亡笔记》";
    }
}

由于TicketServiceImpl 加上了dubbo的@Service注解,在应用启动后,会将这个提供者注册到zookeeper,这样消费者就能消费这个服务。

6,customer配置

①,pom.xml

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--引入dubbo的场景启动器-->
	<dependency>
		<groupId>com.alibaba.boot</groupId>
		<artifactId>dubbo-spring-boot-starter</artifactId>
		<version>0.1.0</version>
	</dependency>
	<!-- 引入zookeeper的客户端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>

	<!--引入公共的api-->
	<dependency>
		<groupId>com.api</groupId>
		<artifactId>api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
</dependencies>

②,application.properties 配置

dubbo.application.name=ticket-customer
dubbo.registry.address=zookeeper://192.168.43.28:2181

server.port=8083

③,controller层代码

import com.alibaba.dubbo.config.annotation.Reference;
import com.api.api.ticket.service.TicketService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomerController {
    // 将会得到Ticket服务
    @Reference
    private TicketService ticketService;

    @RequestMapping("/")
    public String index(){
        return ticketService.buyTicket();
    }
}

7,测试

①,先启动provider

②,再启动customer

③,浏览器调度消费者的消费方法

④,看到上图,说明调度成功

 

© 著作权归作者所有

暗中观察

暗中观察

粉丝 8
博文 138
码字总数 48746
作品 0
惠州
私信 提问
最新官方版的SpringBoot 整合 Dubbo

上次的那个springboot和dubbo的整合版本中,dubbo的版本是2.5.3,它的Service注解和事务不能同时使用,会造成扫描失效,2.6.2的dubbo版本已经纠正了此不便,官方也给出了与springboot整合的q...

FantJ
2018/06/09
0
0
SpringBoot整合Dubbo案例

使用框架: jdk 1.8 springboot-2.1.3 dubbo-2.6 spring-data-jpa-2.1.5 一、开发dubbo服务接口: 按照Dubbo官方开发建议,创建一个接口项目,该项目只定义接口和model类; 1、创建springboo...

ggod
06/09
239
0
微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享

精彩内容 java实战练习项目教程 全网最全电子图书分享 你所需要的大数据视频教程 java学习视频教程及源码 今天又是周末,还是想给大家送一些福利,因为最近一直有小伙伴问我要springboot等微...

公众号_好好学java
2018/08/06
187
0
springboot dubbox 实例

---------------------------------------------------------------------------------------------------------------- springboot 详解 (一) helloworld 下载demo springboot 详解 (二)......

curiousby
2017/01/19
0
0
SpringBoot 整合MongoDB多数据源

SpringBoot 整合MongoDB多数据源 一、前情提要 1.环境:SpringBoot+Dubbo+Zookeeper+MongoDB 2.业务场景有多个数据源,因故需配置多数据源来满足业务需求 二、准备工作 1.什么是SpringBoot ht...

Noseparte
2018/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-在复制集(replication)以及分片(Shard)中创建索引

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在使用MongoDB时,在创建索引会涉及到在复制集(replication)以及分片(Shard)中创建,为了最大限度地减少构建索引的影响,在副本...

ccww_
13分钟前
10
0
SAP HANA数据库multi container模式JDBC链接connection refused

报错如下信息 com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: Cannot connect to jdbc:sap://xxx.xxx.xxx.xxx:30015 [Cannot connect to host xxx.xxx.xxx.xxx:30015 [C......

flash胜龙
38分钟前
19
0
c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
44分钟前
75
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
56分钟前
61
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
今天
37
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部