首页 技术 正文
技术 2022年11月14日
0 收藏 915 点赞 3,814 浏览 7519 个字

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

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

springboot下使用dubbo的简单demo

  

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

springboot下使用dubbo的简单demo

  springboot下使用dubbo的简单demo

springboot下使用dubbo的简单demo

  点击finish即可完成创建

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

springboot下使用dubbo的简单demo

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

  springboot下使用dubbo的简单demo

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添加公用接口

springboot下使用dubbo的简单demo

  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中的类,服务结构如下

springboot下使用dubbo的简单demo

  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;
}
}
  然后启动服务 ,即可在注册中心看到对应的服务已提供

springboot下使用dubbo的简单demo

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

6.服务消费模块 consumer

  项目结构如下

springboot下使用dubbo的简单demo

   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模块后,在注册中心查看

springboot下使用dubbo的简单demo

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

7.启动测试

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

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

  springboot下使用dubbo的简单demo

  同时控制台也打印出了

springboot下使用dubbo的简单demo

  

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,129
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,601
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,444
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,218
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,852
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,940