java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)

4 Dubbo快速入门

Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用,一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。

4.1 服务提供方开发

开发步骤:

(1)创建maven工程(打包方式为war)dubbodemo_provider,在pom.xml文件中导入如下坐标

war

UTF-8

1.8

1.8

5.0.5.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-aspects

${spring.version}

org.springframework

spring-jms

${spring.version}

org.springframework

spring-context-support

${spring.version}

com.alibaba

dubbo

2.6.0

org.apache.zookeeper

zookeeper

3.4.7

com.github.sgroschupf

zkclient

0.1

javassist

javassist

3.12.1.GA

com.alibaba

fastjson

1.2.47

org.apache.maven.plugins

maven-compiler-plugin

2.3.2

1.8

1.8

org.apache.tomcat.maven

tomcat7-maven-plugin

8081

/

(2)配置web.xml文件

创建 webapp/WEB-INF/web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

contextConfigLocation

classpath:applicationContext*.xml

org.springframework.web.context.ContextLoaderListener

(3)创建服务接口

package com.maweiqi.service;

/**

* HelloService

*

* @Author: 马 伟 奇

* @CreateTime: 2019-07-18

* @Description:

*/

public interface HelloService {

public String sayHello(String name);

}

(4)创建服务实现类

package com.maweiqi.service.impl;

import com.alibaba.dubbo.config.annotation.Service;

import com.maweiqi.service.HelloService;

/**

* HelloServiceImpl

*

* @Author: 马 伟 奇

* @CreateTime: 2019-07-18

* @Description:

*/

@Service

public class HelloServiceImpl implements HelloService {

@Override

public String sayHello(String name) {

return "hello " + name;

}

}

注意:服务实现类上使用的Service注解是Dubbo提供的,用于对外发布服务

(5)在src/main/resources下创建applicationContext-service.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

(6)启动服务

1941e4f04dce

启动服务

4.2 服务消费方开发

开发步骤:

(1)创建maven工程(打包方式为war)dubbodemo_consumer,pom.xml配置和上面服务提供者相同,只需要将Tomcat插件的端口号改为8082即可

war

UTF-8

1.8

1.8

5.0.5.RELEASE

org.springframework

spring-context

${spring.version}

org.springframework

spring-beans

${spring.version}

org.springframework

spring-webmvc

${spring.version}

org.springframework

spring-jdbc

${spring.version}

org.springframework

spring-aspects

${spring.version}

org.springframework

spring-jms

${spring.version}

org.springframework

spring-context-support

${spring.version}

com.alibaba

dubbo

2.6.0

org.apache.zookeeper

zookeeper

3.4.7

com.github.sgroschupf

zkclient

0.1

javassist

javassist

3.12.1.GA

com.alibaba

fastjson

1.2.47

org.apache.maven.plugins

maven-compiler-plugin

2.3.2

1.8

1.8

org.apache.tomcat.maven

tomcat7-maven-plugin

8082

/

(2)配置web.xml文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:applicationContext-web.xml

1

springmvc

/

(3)将服务提供者工程中的HelloService接口复制到当前工程

package com.maweiqi.service;

/**

* HelloService

*

* @Author: 马伟奇

* @CreateTime: 2019-07-18

* @Description:

*/

public interface HelloService {

public String sayHello(String name);

}

(4)编写Controller

package com.maweiqi.controller;

import com.alibaba.dubbo.config.annotation.Reference;

import com.maweiqi.service.HelloService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

/**

* HelloController

*

* @Author: 马伟奇

* @CreateTime: 2019-07-19

* @Description:

*/

@Controller

@RequestMapping("/demo")

public class HelloController {

@Reference

private HelloService helloService;

@RequestMapping("/hello")

@ResponseBody

public String getName(String name){

//远程调用

String result = helloService.sayHello(name);

System.out.println(result);

return result;

}

}

注意:Controller中注入HelloService使用的是Dubbo提供的@Reference注解

(5)在src/main/resources下创建applicationContext-web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://code.alibabatech.com/schema/dubbo

http://code.alibabatech.com/schema/dubbo/dubbo.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

(6)运行测试

1941e4f04dce

运行

在浏览器输入http://localhost:8082/demo/hello?name=Jack,查看浏览器输出结果

4.3 代码重构

① 创建项目:dubbodemo_interface

1941e4f04dce

创建项目

② 把 项目dubbodemo_consumer 和 项目dubbodemo_provider当中的 接口 HelloService 拷贝到dubbodemo_interface工程里面

1941e4f04dce

image.png

③ 删除工程dubbodemo_consumer 和 工程dubbodemo_provider当中的 接口 HelloService

1941e4f04dce

image.png

dubbodemo_consumer 工程和dubbodemo_provider添加pom文件的依赖

com.maweiqi

dubbodemo_interface

1.0-SNAPSHOT

1941e4f04dce

获取数据

5. Dubbo管理控制台

我们在开发时,需要知道Zookeeper注册中心都注册了哪些服务,有哪些消费者来消费这些服务。我们可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,部署到tomcat即可。

5.1 安装

安装步骤:

(1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下

1941e4f04dce

image.png

(2)启动tomcat,此war文件会自动解压

1941e4f04dce

image.png

(3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前使用的Zookeeper的ip地址和端口号

dubbo.registry.address=zookeeper://192.168.134.129:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

1941e4f04dce

image.png

(4)重启tomcat

5.2 使用

操作步骤:

1941e4f04dce

image.png

(2)启动服务提供者工程和服务消费者工程,可以在查看到对应的信息

1941e4f04dce

image.png

1941e4f04dce

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松获知数据库事务

标题索引事务作用事务流程隔离级别实例验证事务作用事务是确保数据库系统数据的完整性的功能,如现在互联网行业支付业务,不管服务器出于什么原因异常中断,客户要么支付成功要么支付不成功,支付成功数据库金额即会发生变化&#xf…

Safari支不支持HTML5录音? 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。...

先放结论:Safari支不支持HTML5录音? ——据我调查,不支持。 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。 可是当使用Can I use查看兼容性的时候,我发现 不过这个是有历史原因的,我记得RTC是…

面试问题汇总 精选 分析 解答 职业规划 part 4

程序员做业余项目、记笔记和写博客的重要性【经典】 编程是一种创造过程,业余项目允许程序员在没有截止日期或各种限制的条件下,以探索形式编程。业余项目之所以重要,有以下几个原因。 探索新技术 每天都会不断有新技术出现,而…

NB-IOT连接移动onenet平台流程

1. 先创建账号,然后创建产品 2. 创建设备,用ATCGSN和ATCIMI查询NB-IOT的IMEI和IMSI填写上去。 3. 创建好的设备。 转载于:https://www.cnblogs.com/429512065qhq/p/8359247.html

java ejb jsp 架构_JavaEE架构

B/S 体系结构image.pngJava EE 经典架构image.pngJava EE 13规范JDBCimage.pngJDBC 对象与接口java.sql.DriverManager:用于管理JDBC驱动的服务类,当JDBC驱动加载至内存后,DriverManager会自动注册JDBC驱动,然后通过getConnection…

最大开源代码sourceforge 简介 及视音频方面常用的开源代码

所有的音视频凯源代码在这里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下载分析,视频不懂请发邮件给我,帮你分析。 0.视频项目 0.1 VLC media player VLC 多媒体播放器(最初为VideoLAN Clien…

notepad编译java_Notepad++直接编译运行java代码的具体步骤

最近不少朋友表示还不会Notepad直接编译运行java代码的操作步骤,使用下面小编就带来了Notepad直接编译运行java代码的操作方法哦,一起去看看吧。Notepad直接编译运行java代码的具体步骤下载Notepad,找到Plugin Manager。插件--->Plugin Ma…

基于linux 的2048

于 debian 接着写 2048, 的影响,如下面的: 感兴趣的朋友能够在这里(http://download.csdn.net/download/kamsau/7330933)下载。 版权声明:本文博客原创文章,博客,未经同意,不得转载。…

架构师之路

1. 架构师之路(1)---面向过程和面向对象 1、引言 机算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的…

r语言做断轴_R语言用nls做非线性回归以及函数模型的参数估计

非线性回归是在对变量的非线性关系有一定认识前提下,对非线性函数的参数进行最优化的过程,最优化后的参数会使得模型的RSS(残差平方和)达到最小。在R语言中最为常用的非线性回归建模函数是nls,下面以car包中的USPop数据集为例来讲解其用法。数…

day8-异常处理与网络编程

第1章 异常处理 1.1 什么是异常? 1.1.1 描述 #1 什么是异常? # 异常是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常, # 异常便会抛出,程序随之终止 异常就是程序运行时发生错误的信…

进程(并发,并行) join start 进程池 (同步异步)

一、背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的…

xamarin怎么调用java的_XamarinSQLite教程在Xamarin.Android项目中使用数据库

XamarinSQLite教程在Xamarin.Android项目中使用数据库在Xamarin.Android项目中使用预设数据库的具体操作步骤如下:(1)创建一个Xamarin.Android项目,如AndroidSQLiteDemo。(2)在AndroidSQLiteDemo项目的Resources文件夹下创建一个Raw文件夹。(3)将上一节中…

服务框架及服务治理组件——业界调研

声明:主要内容来自公司内部 对业界的调研,不一定恰当、准确、实时。 表格文字较多,APP阅读体验较差 团队服务相关组件\方案通信框架监控负载均衡\路由是否开源腾讯完全自研;BG内部自治,每个BG有自己相应的解决方案,单独…

Swift快速入门(一)第一个Swift程序

1. 本系列说明 本系列只是一个Swift快速入门的教程,并没有详尽的介绍Swift,Swift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可以快速的用Swift来进行开发。另外学…

Scala学习之爬豆瓣电影

简单使用Scala和Jsoup对豆瓣电影进行爬虫,技术比較简单易学。写文章不易,欢迎大家採我的文章,以及给出实用的评论,当然大家也能够关注一下我的github;多谢。 1、爬虫前期准备 找好须要抓取的链接:https://m…

[JMX一步步来] 9、基于JBoss来写MBean

前面都是用JDK自带的JMX实现来写的MBean,JMX的实现不独SUN一家,JBOSS也有自己的JMX实现。如果你使用JBOSS来做WEB服务器,那么基于JBOSS的实现来写MBean,是一个不错的选择。象我们公司就是用JBOSS的,因此所有MBean都是基…

一个漂亮的输出MySql数据库表结构的PHP页面

经常为了方便和直观,我们会首先直接在数据库中设计出表,但是接下来又要将表的结构和设计编写在设计文档中,以便编码的时候可以直观的查询,一旦数据库表非常多,字段非常多的时候,这无疑是件非常郁闷的工作。…

java 属于以下哪种语言_Java属于以下哪种语言?( )

对于宝来(Bora2004)轿车EPS系统,属于当转向扭矩传感器G269发生故障时,只需单独更换转向扭矩传感器就行了。一般说来,下语可以根据下列因素判断趋势线的有效性 ( )。关于股价的移动规律,属于下列论述不正确的是( )。如果希望预测未…

C#设计模式(19)——状态者模式(State Pattern)

原文:C#设计模式(19)——状态者模式(State Pattern)一、引言 在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题,在本文中将首先通过一个银行账户的例子来解释状态者模式,通过这个例子使大家可以对状态…