Dubbo学习-6-sprongboot整合dubbo

1.在前面帖子和工程的基础上,这里使用springboot整合dubbo,首先创建springboot项目:

https://start.spring.io/  进入spring Initializr ,创建服务提供者以及消费者的 springboot项目:

下载后保存到本机,然后解压,导入到eclipse里,并修改包名,把原来的接口的实现类复制过来,然后在pom文件中添加公共接口的依赖:

服务消费者工程同理:将OrderServiceImpl.java拷贝到springboot项目中

2.修改orderService接口(test-interface工程中)及实现类(boot-order-service-consumer工程中)的返回值为List<UserAddress>

在boot-order-service-consumer工程中创建一个controller,并在pom文件引入sprongboot web模块的依赖:

编写测试用的controller:

 1 package com.lch.test.controller;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RequestParam;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8
 9 import com.lch.test.service.OrderService;
10
11 @Controller
12 public class OrderController {
13
14     @Autowired
15     private OrderService orderService;
16
17     @RequestMapping("/initorder")
18     @ResponseBody
19     public Object initOrder(@RequestParam("uid") String userId) {
20         System.out.println("用户id=" + userId);
21         return orderService.initOrder(userId);
22
23     }
24
25 }

然后引入dubbo依赖:dubbo-spring-boot-starter,这时boot-user-service-provider工程的pom文件内容如下:蓝色部分是额外引入的依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.1.6.RELEASE</version>
 9         <relativePath/> <!-- lookup parent from repository -->
10     </parent>
11     <groupId>com.lch.test</groupId>
12     <artifactId>boot-user-service-provider</artifactId>
13     <version>0.0.1-SNAPSHOT</version>
14     <name>boot-user-service-provider</name>
15     <description>Demo project for Spring Boot</description>
16
17     <properties>
18         <java.version>1.8</java.version>
19     </properties>
20
21     <dependencies>
22         <dependency>
23             <groupId>org.springframework.boot</groupId>
24             <artifactId>spring-boot-starter</artifactId>
25         </dependency>
26
27         <!-- springboot2.0版本以上,使用dubbo-spring-boot-starter 2.0.0及以上版本
28         默认会把curator-client也导入到工程中
29         参考https://github.com/apache/dubbo-spring-boot-project -->
30         <dependency>
31             <groupId>com.alibaba.boot</groupId>
32             <artifactId>dubbo-spring-boot-starter</artifactId>
33             <version>0.2.0</version>
34         </dependency>
35
36         <dependency>
37             <groupId>org.springframework.boot</groupId>
38             <artifactId>spring-boot-starter-test</artifactId>
39             <scope>test</scope>
40         </dependency>
41         <!-- 添加公共接口的依赖 -->
42         <dependency>
43             <groupId>com.lch.test</groupId>
44             <artifactId>test-interface</artifactId>
45             <version>0.0.1-SNAPSHOT</version>
46         </dependency>
47     </dependencies>
48
49     <build>
50         <plugins>
51             <plugin>
52                 <groupId>org.springframework.boot</groupId>
53                 <artifactId>spring-boot-maven-plugin</artifactId>
54             </plugin>
55         </plugins>
56     </build>
57
58 </project>

添加dubbo的配置文件:

 1 #应用的名字
 2 dubbo.application.name=user-service-provider
 3 #dubbo注册中心的地址
 4 dubbo.registry.address=127.0.0.1:2181
 5 #dubbo注册中心使用的协议
 6 dubbo.registry.protocol=zookeeper
 7 # dubbo服务提供者与消费者通信使用的协议
 8 dubbo.protocol.name=dubbo
 9 # dubbo服务提供者与消费者通信的端口
10 dubbo.protocol.port=20880
11
12 # dubbo监控中心使用的协议:从注册中心自动发现
13 dubbo.monitor.protocol=registry
14 # 要暴露的服务  在需要暴露的服务(即接口的实现类)上面,加上dubbo的@Service注解即可!!!从而不用指定每个类来暴露服务

使用dubbo的@Service暴露服务:

在启动函数中开启基于注解的dubbo功能

接下来改造boot-order-service-consumer工程:

(1)配置文件修改:

 1 #应用的名字
 2 dubbo.application.name=order-service-consumer
 3 #dubbo注册中心的地址
 4 dubbo.registry.address=zookeeper://127.0.0.1:2181
 5 #dubbo注册中心使用的协议
 6 #dubbo.registry.protocol=zookeeper
 7 # dubbo服务提供者与消费者通信使用的协议
 8 dubbo.protocol.name=dubbo
 9 # dubbo服务提供者与消费者通信的端口
10 dubbo.protocol.port=20880
11
12 # dubbo监控中心使用的协议:从注册中心自动发现
13 dubbo.monitor.protocol=registry
14 #使用dubbo的@Reference来调用远程服务

(2)使用dubbo的@Reference注解来调用远程服务:OrderServiceImpl类中@autowired注解替换成dubbo的@Reference注解即可!

 1 package com.lch.test.service.impl;
 2
 3 import java.util.List;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7
 8 import com.alibaba.dubbo.config.annotation.Reference;
 9 import com.lch.test.bean.UserAddress;
10 import com.lch.test.service.OrderService;
11 import com.lch.test.service.UserService;
12
13 /**
14  * 1.将服务提供者注册到注册中心 2.让服务消费者去注册中心订阅服务提供者的服务地址
15  *
16  * @author
17  */
18 @Service // 这里暂时使用spring的注解
19 public class OrderServiceImpl implements OrderService {
20
21     /*
22      * 这里使用dubbo的@Reference注解来远程引用UserService的服务
23      */
24 //    @Autowired
25     @Reference
26     UserService userService;
27
28     public List<UserAddress> initOrder(String userId) {
29         System.out.println("用户id=" + userId);
30         // 调用userService 获取用户收货地址
31         List<UserAddress> addressList = userService.getUserAddressList(userId);
32         addressList.forEach(address -> {
33             System.out.println(address);
34         });
35         return addressList;
36     }
37
38 }

(3)主程序中启用dubbo注解

 1 package com.lch.test;
 2
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5
 6 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
 7
 8 @EnableDubbo
 9 @SpringBootApplication
10 public class BootOrderServiceConsumerApplication {
11
12     public static void main(String[] args) {
13         SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
14     }
15
16 }

最后,开始测试:

(1)启动zookeeper

(2)启动boot-order-service-consumer ,boot-user-service-provider 的main程序

页面访问http://localhost:8080/initorder?uid=1 ,这时服务的消费者orderService就通过dubbo提供的RPC服务远程调用另外一个进程中的userService服务,返回页面一个地址列表

代码git地址:https://github.com/liuch0228/dubbo-learn.git

原文地址:https://www.cnblogs.com/enjoyjava/p/11192485.html

时间: 2024-10-08 10:58:29

Dubbo学习-6-sprongboot整合dubbo的相关文章

dubbo学习(三) springboot整合dubbo mybatis mysql

dubbo-admin查看服务和服务提供方配置 服务消费方配置 和web 整合相对复杂一些,常出现的问题是Controller中 有@Reference配置的属性  没注入进来而调用时报null 异常 原文地址:https://www.cnblogs.com/LDDXFS/p/9941203.html

dubbo学习(九)dubbo监控中心

安装与配置 下载地址:https://github.com/apache/dubbo-admin/tree/master(包含管理控制台和监控中心) PS:  下载前要选择master分支以后再进行下载(重要!!!) 安装以后可以更直观的观察服务状态,使用可视化的界面来管理和维护服务.(可选安装) 1.安装 2.配置监控中心 3.配置provider.xml和consumer.xml PS:分别在provider.xml和consumer.xml里都加入以下代码,才可以使得生产者和消费者均被监控

dubbo学习(十一)dubbo面试题

本文借鉴:史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!(特此感谢!) 1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 2.为什么要用Dubbo? 使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求. 3.Dubbo 和 Spring Cloud 有什么区别? 通信方式不同 Dubbo 使用

dubbo学习(六)dubbo管理控制台

管理控制台的安装与使用 下载地址:https://github.com/apache/dubbo-admin/tree/master(管理控制台) PS:  下载前要选择master分支以后再进行下载(重要!!!) 安装以后可以更直观的观察服务状态,使用可视化的界面来管理和维护服务.(可选安装) 1.下载并解压文件 2.配置zookeeper地址 PS: 启动dubbo-admin之前必须先启动zk. 3.dubbo-admin打包 4.运行dubbo-admin 5.访问控制台 哦吼!~  启

Dubbo学习(一) Dubbo原理浅析

一.初入Dubbo Dubbo学习文档: http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator.apache.org/books/dubbo-admin-book/ https://github.com/alibaba/dubbo http://alibaba.github.io/dubbo-doc-static/Home-zh.htm 一.什么是dubbo   Dubbo是Alibaba开

rpc框架dubbo学习入门及环境搭建(spring boot+Kotlin)

学习之前,确保有以下知识基础: Java网络编程 Socket传输数据 IO流 rpc简介及实现 rpc是remote procedure call的简写,意思为远程过程调用. rpc应用较多的情景是分布式开发,那什么是分布式开发呢? 原本我也是想自己解释的,奈何网上大佬解释得很清楚了,这里就不献丑了,建议阅读完下面推荐的几篇再继续往下 [转]分布式架构的演进(JavaWeb) 如何给老婆解释什么是RPC 如何实现一个简单的RPC 刚开始的时候,服务和调用都是在同一机器,这叫本地过程调用 之后,

dubbo学习

转自:http://my.oschina.net/u/216330/blog/224873 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及"请求-响应"模式的信息交换方式. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持. 自动发现: 基于注册中心目录服

Dubbo学习小记

前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是通过Dubbo来治理的.其实之前我就对SOA.RPC等分布式服务的概念有所了解,Dubbo也多多少少知道一些,不过能亲身使用那是再好不过的了. 此文就对我的Dubbo学习做一个小的总结,基本我总结的这些内容对于入门应该是足够了.关于Dubbo的更详细信息,阿里有专门出手册,手册地址为http://d

淘宝SOA框架dubbo学习(2)--搭建Zookeeper注册中心服务

淘宝SOA框架dubbo学习(1) http://my.oschina.net/hanshubo/blog/374974 1.下载 Zookeeper 下载页面地址: http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/ 注:下面步骤,windows和linux下几乎没什么太大区别 2.解压缩后进入 C:\zookeeper-3.4.6 目录结构如下图 3.进入conf目录 备份zoo_sample.cfg文件,然后将zoo_sample.c