SpringBoot集成Dubbo

(1)、新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等。

项目:

 

公共Bean:

 1 package cn.coreqi.entities;
 2 
 3 import java.io.Serializable;
 4 
 5 public class User implements Serializable {
 6     private Integer id;
 7     private String userName;
 8     private String passWord;
 9     private Integer enabled;
10 
11     public User() {
12     }
13 
14     public User(Integer id, String userName, String passWord, Integer enabled) {
15         this.id = id;
16         this.userName = userName;
17         this.passWord = passWord;
18         this.enabled = enabled;
19     }
20 
21     public Integer getId() {
22         return id;
23     }
24 
25     public void setId(Integer id) {
26         this.id = id;
27     }
28 
29     public String getUserName() {
30         return userName;
31     }
32 
33     public void setUserName(String userName) {
34         this.userName = userName;
35     }
36 
37     public String getPassWord() {
38         return passWord;
39     }
40 
41     public void setPassWord(String passWord) {
42         this.passWord = passWord;
43     }
44 
45     public Integer getEnabled() {
46         return enabled;
47     }
48 
49     public void setEnabled(Integer enabled) {
50         this.enabled = enabled;
51     }
52 
53     @Override
54     public String toString() {
55         return "User{" +
56                 "id=" + id +
57                 ", userName='" + userName + '\'' +
58                 ", passWord='" + passWord + '\'' +
59                 ", enabled=" + enabled +
60                 '}';
61     }
62 }

 

公共服务接口:

 1 package cn.coreqi.service;
 2 
 3 import cn.coreqi.entities.User;
 4 
 5 import java.util.List;
 6 
 7 public interface UserService {
 8     public void addUser(User user);
 9     public void delById(Integer id);
10     public void modifyUser(User user);
11     public User getById(Integer id);
12     public List<User> getList();
13 }

 

(2)、新建SpringBoot项目用作与服务提供者

  1)、添加依赖

    

 1         <dependency>
 2             <groupId>com.alibaba.boot</groupId>
 3             <artifactId>dubbo-spring-boot-starter</artifactId>
 4             <version>0.2.0</version>
 5         </dependency>
 6 
 7         <!--引入公共的Maven项目-->
 8         <dependency>
 9             <groupId>cn.coreqi</groupId>
10             <artifactId>springbootdubboapi</artifactId>
11             <version>1.0-SNAPSHOT</version>
12         </dependency>

 

*  dubbo-spring-boot-starter的版本与SpringBoot的版本之间有相应的对照关系

*  0.2.x的默认使用curator作为操作zookeeper的客户端。0.1.x需要自行导入zookeeper的客户端

1 <dependency>
2     <groupId>com.github.sgroschupf</groupId>
3     <artifactId>zkclient</artifactId>
4     <version>0.1</version>
5 </dependency>

 

  2)、配置相关属性

1 dubbo.application.name=boot-service-provider
2 dubbo.registry.address=192.168.205.128:2181
3 dubbo.registry.protocol=zookeeper
4 dubbo.protocol.name=dubbo
5 dubbo.protocol.port=20880
6 dubbo.monitor.protocol=registry
7 
8 server.port=8080

  3)、在要暴露服务的服务实现类上添加Dubbo的@Service注解,并将Spring的@Service注解替换为@Component注解

 1 package cn.coreqi.service.impl;
 2 
 3 import cn.coreqi.entities.User;
 4 import cn.coreqi.service.UserService;
 5 import com.alibaba.dubbo.config.annotation.Service;
 6 import org.springframework.stereotype.Component;
 7 
 8 import java.util.ArrayList;
 9 import java.util.List;
10 
11 @Component  //org.springframework.stereotype.Component
12 @Service    //com.alibaba.dubbo.config.annotation.Service
13 public class UserServiceImpl implements UserService {
14     private static List<User> users = new ArrayList<>();
15     static {
16         users.add(new User(1,"fanqi","123456",1));
17         users.add(new User(2,"zhangsan","123456",1));
18         users.add(new User(3,"lisi","123456",1));
19         users.add(new User(4,"wangwu","123456",1));
20     }
21     @Override
22     public void addUser(User user) {
23         users.add(user);
24     }
25 
26     @Override
27     public void delById(Integer id) {
28         for (User s:users){
29             if(s.getId() == id){
30                 users.remove(s);
31                 break;
32             }
33         }
34     }
35 
36     @Override
37     public void modifyUser(User user) {
38         delById(user.getId());
39         addUser(user);
40     }
41 
42     @Override
43     public User getById(Integer id) {
44         for (User s:users){
45             if(s.getId() == id){
46                 return s;
47             }
48         }
49         return null;
50     }
51 
52     @Override
53     public List<User> getList() {
54         return users;
55     }
56 }

  4)、在主程序启动类上添加@EnableDubbo注解开启基于注解的Dubbo功能

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

 

(3)、新建SpringBoot项目用作与服务消费者

  1)、添加依赖(和服务提供者相同。此处略)

  2)、配置相关属性

  

1 dubbo.application.name=boot-service-consumer
2 dubbo.registry.address=zookeeper://192.168.205.128:2181
3 dubbo.monitor.protocol=registry
4 
5 server.port=9090

  3)、在远程引用服务的属性上添加@Reference注解

 1 package cn.coreqi.controller;
 2 
 3 import cn.coreqi.entities.User;
 4 import cn.coreqi.service.UserService;
 5 import com.alibaba.dubbo.config.annotation.Reference;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9 
10 import java.util.List;
11 
12 @Controller
13 public class UserController {
14     @Reference
15     public UserService userService;
16 
17     @ResponseBody
18     @RequestMapping("/users")
19     public List<User> getUsers(){
20         return userService.getList();
21     }
22 }

  4)、在主程序启动类上添加@EnableDubbo注解开启基于注解的Dubbo功能(和服务提供者相同。此处略)

 

原文地址:https://www.cnblogs.com/fanqisoft/p/10357316.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在网络请求时,总会有各种异常情况出现,我们需要提前处理这种情况。在完善的rpc组件dubbo中,自然是不会少了这一层东西的。我们只需要通过一些简单的配置就可以达到超时限制的作用了。dubbo的设计理念是,客户端控制优先,服务端控制兜底。 1.超时机制的实现思路要想实
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进到分布式应用,特别是微服务理念的兴起,让大规模、高并发、低延迟的分布式应用成为可能。云原生时代下,微服务框架本身也在不断地进化和迭代演进。微服务框架一般会涉及到以下几个知识点:本文我们着重探讨以下三大微服务框架:
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我是否熟悉Dubbo,这我熟啊~他说遇到了一个Dubbo异步调用的问题,怀疑是个BUG,提到BUG我可就不困了,说不定可以水,哦不...写一篇文章。问题复现遇到问题,尤其不是自己遇到的,必须要复现出来才好排查,截一个当时的聊天记录:他的问题
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右),如果他还没学会阅读源码,那么他就会遇到瓶颈。因为到了这个时候的开发,他应该不仅仅只会做那些CURD的业务逻辑,而应该会根据公司的实际情况去写框架。而基本上没有谁能像天才一样从零写出一个框架,很多人写框架其实
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多种容错方案,默认值为failover(重试)1)、FailoverCluster(默认)失败自动切换,当出现失败,重试其他服务器,通常用于读操作,但重试会带来更长延迟,可以通过属性retries来设置重试次数(不含第一次)2)、FailfastC
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用到的设计模式。下面将逐个列举其中的设计模式,并根据自己的理解分析这样设计的原因和优劣。责任链模式责任链模式在Dubbo中发挥的作用举足轻重,就像是Dubbo框架的骨架。Dubbo的调用链组织是用责任链模式串连起来的。责任链
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面:你对RPC框架的底层原理掌握程度。考验你的整体RPC框架系统设计能力。具体,mike来为大家详解。RPC和RPC框架1.RPC(RemoteProcedure
Dubbo在启动时会检查服务提供者所提供的服务是否可用,默认为True。(1)、单个服务关闭启动时检查(check属性置为false)1)、基于xml文件配置方式1<!--3、声明需要调用的远程服务接口,生成远程服务代理,可以和本地Bean一样使用-->2<dubbo:referenceid="userService"i
(1)、新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等。项目: 公共Bean:1packagecn.coreqi.entities;23importjava.io.Serializable;45publicclassUserimplementsSerializable{6privateIntegerid;7privateStringuserName;
1.安装java:yuminstalljava2.下载Tomcat:wgethttp://mirrors.shu.edu.cn/apacheomcatomcat-9/v9.0.14/bin/apache-tomcat-9.0.14-fulldocs.tar.gz3.解压Tomcat:tar-xvfapache-tomcat-9.0.14.tar.gz-C/usr/local/cd/usr/local/mvapache-tomcat-9.0.14//usr/local
工程结构:主pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.ap
微服务架构到底应该如何选择? 什么是微服务?微服务的概念最早是在2014年由MartinFowler和JamesLewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTPAPI通讯。同时,服务会
(1)、dubbo-admin(管理控制台)1)、从https://github.com/apache/incubator-dubbo-ops下载解压2)、修改dubbo-admin配置文件中zookeeper的注册地址3)、使用Maven命令打包mvncleanpackage4)、使用java-jar dubbo-admin-0.0.1-SNAPSHOT.jar命令运行5)、访
Dubbo概述Dubbo的背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。  单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
前言跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来,期间也没有准备充分,到底是因为技术原因,影响自己的发展,偏移自己规划的轨迹,还是钱给少了,不受重视。准备不充分的面试,完全是浪费时间,更是对自己的不负责
Dubbo是阿里巴巴内部使用的分布式业务框架,2012年由阿里巴巴开源。由于Dubbo在阿里内部经过广泛的业务验证,在很短时间内,Dubbo就被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等。由于阿里策略变化,2014年10月Dubbo停止维护。随后部分互联网公司公开了自行维护的Du
1.java.lang.NoSuchMethodError:org.jboss.resteasy.specimpl.BuiltResponse.getHeaders()Ljavax/wss/core/MultivaluedMap;解决:参考https://stackoverflow.com/questions/17618587/jetty-9-0-embedded-and-resteasy-3-0-keeps-throwing-nosuchmethoderror将依赖提到最前
服务消费者引用服务提供者的服务时可能由于网络原因导致长时间未返回相应,此时大量的线程将会阻塞,引起性能下降等问题。可以通过引入服务超时来解决该问题 服务超时指服务在给定的时间内未返回相应将立即终止该请求,一般配合retries(重试次数)使用。单位毫秒,默认值1000 
服务超时后重试次数【retries】,不包含第一次调用,0代表不重试*我们应该在幂等方法上设置重试次数【查询、删除、修改】,在非幂等方法上禁止设置重试次数。★幂等:指多次运行方法所产生的最终效果是一致的1<!--3、声明需要调用的远程服务接口,生成远程服务代
一、Web应用架构的演变​随着互联网的发展,网站应用的规模不断扩大,Web应用架构也在不断的演变​四个阶段:单一应用、垂直应用、分布式服务、流动计算1.单一应用架构​当网站访问量很小时,只需要一个应用程序,将所有的功能都部署在一起,以减少部署节点和成本​此时关键