1.一些话

  现在java后端开发大多用springboot来简化环境搭建,现在一直使用的是springcloud和k8s有关的东西,以前用过dubbo,但那会儿的开发环境搭建流程较为繁琐,而且不支持rest调用。现在简化了不少搭了一下之后发现确实比以前要方便很多了。dubbo由于是rpc调用的,速度上来说是肯定比springcloud要快一些的,不过现在也支持rest调用了,案例中两种方式都会有。不过springcloud感觉各方面的支持来说要更友好一些,所以各有千秋吧。

2.环境准备

  2.1 搭建nacos注册中心

  教程连接  https://nacos.io/zh-cn/docs/quick-start.html

  根据连接中的地址教程搭建即可,然后访问对应的地址http://localhost:8848/nacos/index.html#/login

  将地址端口换为设置的即可,如果出现如下界面代表成功,账号密码默认为nacos/nacos

  

  2.2ide直接新建maven项目 dubbo-service

  

  点击finish即可完成创建

2.3 创建common-api  provider   consumer三个模块分别为公用api接口,服务提供方,服务调用方

 点击新建module即可完成创建 具体创建过程略。。可到文末的源码地址下载查看具体项目,创建完的项目如下即可

  

3.引入依赖

只需要在dubbo-service中引入依赖即可,下面的module模块会继承依赖,即dubbo-service的pom.xml文件如下所示

记住不能使用springboot太高的版本,因为目前是不支持tomcat9的。高版本的springboot会嵌入tomcat9进去

 <?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">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>common-api</module>
<module>provider</module>
<module>consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dubbo</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<java.version>1.8</java.version>
<nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
<netty-all.version>4.0.35.Final</netty-all.version>
</properties> <dependencies>
<!--springboot有关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--dubbo有关-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>0.6.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-common</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo-registry-api</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-autoconfigure</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty-all.version}</version>
</dependency>
<!--公用api-->
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- rest有关 -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>3.0.12.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.12.Final</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

这儿注意在dubbo-service中引入了自己创建的common-api 这样的话provider和consumer项目都可以直接调用

4. common-api添加公用接口

  UserDTO为测试传输类

public class UserDTO implements Serializable {

    private String username;

    private String password;

    public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "UserDTO{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

  UserService为公用api接口

public interface UserService {

    UserDTO getUserById( String id);
}

5.provider模块

该模块为服务提供方,因此需要实现公用api中的类,服务结构如下

  application.yml配置文件如下 注册中心地址根据自己配置的进行配置(使用zookeeper的同学不要直接copy着用。。) 这儿配置的支持dubbo协议与rest协议两种主流的用法
dubbo:
application:
name: user-provider
id: user-provider
registry:
address: nacos://127.0.0.1:8848
protocols:
dubbo:
name: dubbo
port: -1
server: tomcat
rest:
name: rest
port: 8888
server: tomcat
spring:
application:
name: provider-demo
main:
allow-bean-definition-overriding: true
server:
port: 8085
  springboot的启动类 ProviderApplication.java类代码如下  @EnableDubbo记得开启
@SpringBootApplication
@EnableDubbo
public class ProviderApplication { public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
  服务实现类UserServicImpl  此处实现的是公用api里面的接口 (仔细看好每个注解在哪个包下 不要瞎引 尤其是@Service)
package com.dubbo.provider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import dubbo.api.UserService;
import dubbo.entity.UserDTO; import javax.ws.rs.*;
import javax.ws.rs.core.MediaType; /**
* @Description:
* @author: zhoum
* @Date: 2019-06-26
* @Time: 9:50
*/
@Path("/user")
@Service(protocol = {"rest","dubbo"})
public class UserServiceImpl implements UserService {
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
@GET
@Override
public UserDTO getUserById(@PathParam("id") String id) {
UserDTO u= new UserDTO();
u.setUsername("用户名:"+id);
u.setPassword("12346");
return u;
}
}
  然后启动服务 ,即可在注册中心看到对应的服务已提供

  点击详情查看即可看到分别提供了dubbo协议和rest协议的服务,到此服务发布成功

6.服务消费模块 consumer

  项目结构如下

   application.yml配置如下 记住端口不要与provider重复
dubbo:
application:
name: user-consumer
id: user-consumer
registry:
address: nacos://127.0.0.1:8848
protocols:
dubbo:
name: dubbo
port: -2
server: tomcat
rest:
name: rest
port: 8889
server: tomcat
spring:
application:
name: consumer-demo
main:
allow-bean-definition-overriding: true
server:
port: 8090
  ConsumerApplication.java为springboot的启动类  也记得要加@EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class,args);
}
}
  WebConfig则用来增加配置下RestTemplate 方便等会儿的rest调用
@Configuration
public class WebConfig { @Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
  ConsumerContrller则是测试调用服务的类 UserService是引用的common-api里面的接口
package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import dubbo.api.UserService;
import dubbo.entity.UserDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import java.util.HashMap; /**
* @Description:
* @author: zhoum
* @Date: 2019-06-26
* @Time: 9:55
*/
@RestController
@RequestMapping("/consumer")
public class ConsumerContoller { @Autowired
private RestTemplate restTemplate; @Reference
private UserService userService; @GetMapping("/user")
public UserDTO getUser(){
     //rest方式调用
UserDTO user = restTemplate.getForObject("http://localhost:8888/user/123" , UserDTO.class , new HashMap<>());
System.out.println(user);
     //传统方式调用
UserDTO wo = userService.getUserById("wo");
return wo;
}
}
 启动consumer模块后,在注册中心查看

  到此服务提供者与消费者均正常发布

7.启动测试

  上面步骤中 两个模块都启动后调用consumer中的ConsumerController中的接口

  在浏览器中访问  http://localhost:8090/consumer/user

  

  同时控制台也打印出了

  

  到此,服务正常注册与发现,通过dubbo协议进行调用和rest调用都已经成功

最后项目的github地址为: https://github.com/hetutu5238/zmc-dubbo

springboot下使用dubbo的简单demo的更多相关文章

  1. SpringBoot下的Dubbo和Zookeeper整合

    最近一直在学各种分布式的内容,学到了dubbo分布式服务框架就想写个小demo使用一下,但是由于我要整合在SpringBoot框架中,SpringBoot框架毕竟提倡的是java注解配置,XML文件不 ...

  2. windows下 zookeeper dubbo 安装+配置+demo 详细图文教程

    Java集群优化——dubbo+zookeeper构建 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这 ...

  3. Springboot下事务管理的简单使用

    关于事务管理的概念这里就不多介绍了,在我的博客“JDBC事务之理论篇”中也有介绍. 关于Spring的事务管理,主要是通过事务管理器来进行的.这里看个Spring事务管理的接口图:(来自博客https ...

  4. ## springboot 下策略模式的简单使用

    1.灵魂三问 接手前人(已跑路)项目快乐否? 前人项目不写注释懵逼否? 一个方法中一堆if/else,且业务判断条件用简单数字(或英文字母),不带注释,想打人否?     所以,对于上述三个问题,我写 ...

  5. 基于IDEA采用springboot+Mybatis搭建ssm框架简单demo项目的搭建配置流程

    一.通过对比可以原始SSM搭建流程,spring boot省去了大量的配置,极大提高了开发者的效率.原始SSM框架搭建流程见博客: https://www.cnblogs.com/No2-explor ...

  6. SpringBoot 封装异步执行任务简单demo

    ThreadPoolConfig.java import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.concurrent.B ...

  7. 基于springboot构建dubbo的入门demo

    之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ...

  8. SpringBoot分布式:Dubbo+zookeeper

    西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...

  9. 利用SpringBoot+Logback手写一个简单的链路追踪

    目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简 ...

随机推荐

  1. jmeter 进行websocket数据帧过大导致code 1009

    Response message: Received: Close frame with status code 1009 and close reason 'No async message sup ...

  2. oracle关于sequence的个人理解

    oracle关于sequence的个人理解 1. sequence在多用户使用时的同步问题 个人感觉sequence是以连接(会话)为基础,类似于java中使用mysql的一个connection 网 ...

  3. 用vscode写c/c++

    用vscode写c/c++ 1. 安装wsl windows下安装linux(ubuntu) 2. 打开设置 3. 输入run code 随便找一个地方粘贴,会出现一大段代码 4. 把c对应的代码修改 ...

  4. Python socket day1

    客户端和服务端通过ip地址确认互相身份.(ip:用来在网络中标记一台电脑) 如果A,B两个人IP地址相同,接受到的信息有时候A收到,有时候B收到 当你用QQ时,双击选中头像其实就是选中了对方的IP地址 ...

  5. Spring Security 源码分析 --- WebSecurity

    概述 spring security 源码分析系列文章. 源码分析 我们想一下,我们使用 ss 框架的步骤是怎么样的. @Configuration @EnableWebSecurity @Enabl ...

  6. 解决1130-host'192.168.2.137'is not allowed to connect to this mysql server报错问题

    连接数据库服务器出现1130-host'192.168.2.137'is not allowed to connect to this mysql server错误, 这个问题是因为在数据库服务器中的 ...

  7. 解决:jenkins jnlp安装 provided port 40127 is not reachable

    解决方法: 开放linux 防火墙40127端口允许下载jnlp centos7 解决如下: [root@hostuser chrome]# firewall-cmd --zone=public -- ...

  8. 使用在线编辑 svg 软件修改 svg 图片

    网站需要使用图标字体,但设计师给的图标大小有问题,故使用下面说陈述方法简单修改了一下.使用到的在线编辑软件地址为:https://editor.method.ac/ 问题: 注:至于如何使用图标字体( ...

  9. 简单的单元测试unittest实例

    unittest是Python中自带的一个单元测试模块,常常用它来做单元测试,它里面封装了用例的初始化操作和执行,以及返回结果的校验等操作. 在学习unittest框架之前需要先了解几个知识点: Te ...

  10. Jmeter进行分布式性能测试

    由于Jmeter本身的瓶颈,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误.要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的 ...