dubbo web工程示例_分布式开发-Zooker+dubbo入门-Demo

5b59f1de6c46e331554f36c22efaecf7.png

作者:知了堂-刘阳

882a5054c7b032c6da364a5b76f0e1c3.png

1.什么是SOA架构

SOA 是Service-Oriented Architecture的首字母简称,它是一个面向服务的架构模式(俗称:分布式;面服务的分布式)

为什么互联网项目会采用SOA架构呢?随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行。

5d6525935fcbfd22dddf41bbe8479f77.png

2.Dubbo框架

Dubbo是一个分布式框架,由阿里巴巴团队开发的开源项目,在电商系统(高可用,高并发,高扩展)广泛的用用

Dubbo也是RPC远程服务调用一套解决方案,以及SOA服务治理方案

3.Dubbo框架原理

078eb9293f3a1b2a2386069c739be2ef.png

节点角色说明:

· Provider: 暴露服务的服务提供方。

· Consumer: 调用远程服务的服务消费方。

· Registry: 服务注册与发现的注册中心。

· Monitor: 统计服务的调用次调和调用时间的监控中心。

· Container: 服务运行容器。

调用关系说明:

· 0. 服务容器负责启动,加载,运行服务提供者。

· 1. 服务提供者在启动时,向注册中心注册自己提供的服务。

· 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

· 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推

送变更数据给消费者。

· 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,

如果调用失败,再选另一台调用。

· 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计

数据到监控中心。

4.zookeeper + dubbo 的入门demo

思路:

(1)根据dubbo的原理图,案例中涉及到两个服务:服务提供者;服务消费者

(2)技术栈:spring+dubbo+zookeeper

(3)服务提供者:service层提供

(4)服务消费者:controller层提供

(5)但是两个程序不在同一个web服务器上,我们会设置两个服务端口8081;8082

(6)zookeeper就是我们服务的注册中心

服务提供者编码

(1)创建maven工程,在pom.xml中引入依赖,同时打tomcat7-maven-plugin的插件

dubbo框架的版本 2.5.3,不支持最新的spring5.x的版本,目前的版本是spring4.x的版本

加入log4j的依赖包【重要】

log4j.rootLogger=INFO,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n
<?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><groupId>com.zlt</groupId><artifactId>dubbocustomer</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>dubbocustomer Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.0.3.RELEASE</version></dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency></dependencies><build><finalName>dubbocustomer</finalName><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8082</port><path>/</path><uriEncoding>UTF-8</uriEncoding><server>tomcat7</server></configuration></plugin></plugins></pluginManagement></build>
</project>

(2)在工程的web.xml文件添加加载spring.xml配置文件的代码

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

(3)编写spring.xml文件,加入dubbo.xsd的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><dubbo:application name="dubboprovider"></dubbo:application><dubbo:registry address="zookeeper://192.168.0.105:2181"></dubbo:registry><dubbo:annotation package="com.zlt.service"></dubbo:annotation></beans>

(4)创建UserService

package com.zlt.service;public interface UserService {public String getName();
}

(5)创建UserServiceImpl,添加@Service注解,但是@Service注解来自dubbo包

package com.zlt.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.zlt.service.UserService;@Service
public class UserServiceImpl implements UserService {@Overridepublic String getName() {return "zhiliaotang...";}}

(6)通过maven来运行项目工程

命令:tomcat7:run,此命令是一个maven命令。如果第一次加入tomcat7-maven-plugin,需要在运行此命令的时候进行插件的下载

2640ed11eea79e013e119d1c04fc6d67.png

e5c6e7d99c939bd72bfccc1b98e07bbb.png

(7)tomcat7-maven-plugin插件命令【扩展】

tomcat7:run,启动嵌入tomcat,并运行当前项目

tomcat7:deploy,部署一个web war包

tomcat7:reload,重新加载web war包

tomcat7:start,启动tomcat

tomcat7:stop,停止tomcat

tomcat7:undeploy,停止一个web war包

服务消费方编码

(1)继续创建maven-webapp工程,pom.xml代码和前面的一样

(2)创建spring-mvc.xml配置文件

f21decc413b0f9ed1e9eb40b6aeca2b4.png

(3)在web.xml文件,加载spring-mvc.xml配置文件,并设置好SpringMVC的核心控制器

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

(3)拷贝业务接口到dubbocustomer项目工程里面

(4)创建IndexController,同时依赖UserService接口。注意:这里通过阿里的@Reference注解完成依赖关系

package com.zlt.controller;import com.alibaba.dubbo.config.annotation.Reference;
import com.zlt.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class IndexController {@Referenceprivate UserService userService; // 依赖注入UserService@RequestMapping("/index")@ResponseBodypublic String index() {return userService.getName();}}

(5)修改spring-mvc.xml配置文件,加入阿里的dubbo的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><mvc:annotation-driven></mvc:annotation-driven><dubbo:application name="dubbocustomer"></dubbo:application><dubbo:registry address="zookeeper://192.168.1.19:2181"></dubbo:registry><dubbo:annotation package="com.zlt.controller"></dubbo:annotation></beans>

(6)测试,http://localhost:8082/index,通过8082的端口中index接口去访问8081端口中的service。

今天的分享先到这儿了,更多编程学习干货,请关注专栏:

知了编程学习圈​zhuanlan.zhihu.com
41c961df51b05f99c876b0bba9063a7f.png

e76705746d5bb7349ee319e8d9dbd8f9.png

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

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

相关文章

Linux如何避免每次开启 CentOS 时,都要手动开启 sshd 服务,防止连接不上Xshell

避免每次开启 CentOS 时&#xff0c;都要手动开启 sshd 服务&#xff0c;可以将 sshd 服务添加至自启动列表中&#xff0c; 输入 systemctl enable sshd.service 可以通过输入&#xff1a;查看是否开启了sshd 服务自启动 systemctl list-unit-files | grep sshd

380免费云存储_三款功能强大的云盘软件,完全替代百度云与腾讯云

众所周知&#xff01;百度云是百度旗下良心产品之一&#xff0c;有免费版&#xff0c;但是免费版限速太厉害&#xff0c;让很多免费用户都难以接受&#xff0c;其次就是腾讯云&#xff0c;腾讯云也是腾讯旗下的良心产品之一&#xff0c;但是两个产品都不是很完美&#xff0c;那…

centos右上角wired图标消失有效解决方案【转载】

突然之间就发现centos7的右上角的网络连接不见了&#xff0c;卧槽&#xff0c;这么神奇的吗&#xff1f;然后又无意中在网上浏览了这个方法&#xff0c;简单又好用 最近在学习Linux配置nginx时&#xff0c;左上角的wired图标突然没了&#xff0c;很神奇。然后在网上按着很多博客…

mysql 关联查询_mysql数据库调优(二)

第五、查询优化1、查询慢的原因&#xff1a;网络因素、CPU、IO、上下文切换、系统调用、生成统计信息、锁等待时间等2、优化数据库访问&#xff1a;查询性能地下的原因是访问的数据太多&#xff0c;某些查询不可避免的需要筛选大量的数据&#xff0c;可以通过减少访问数据量的方…

Linux连接xshell时连不上的问题【转载】

最近这一周由于自己的xshell突然连接不到虚拟机&#xff0c;在网上找了很多种方法也没能解决&#xff0c;以至于自己在学习很多知识的时候都没能很好的去验证&#xff0c;去尝试。最后在求助大佬的时候终于将xshell重新连接到了虚拟机&#xff01;&#xff01; 以下是我对xshel…

Linux的实际操作:关机shutdown、重启reboot、用户注销logout

1.关机和重启命令 &#xff08;1&#xff09;shutdown &#xff1a;shutdown -h now(立即关机) 、shutdown -h 1(1分钟后关机)、shutdown -r now(立即重启) &#xff08;2&#xff09;halt&#xff1a;直接使用&#xff0c;效果等价于关机 &#xff08;3&#xff09;reboot&…

sql 一列中平均应发工资_劳动者的工资标准,应如何认定?

工资是指劳动者付出体力或脑力劳动后所得的对价&#xff0c;体现的是劳动者创造的社会价值。自我国劳动争议仲裁制度建立以来&#xff0c;工资(劳动报酬)争议一直是劳动争议的热点。如何准确把握工资标准的认定&#xff0c;对维护劳动者合法权益、构建和谐稳定的劳动关系具有重…

Linux的实际操作:用户管理(用户添加useradd -d和设置用户密码passwd)

Linux创作者对于用户管理主要体现在两个方面 1.将用户存放到不同的组去进行管理&#xff0c;一个用户可以放在不同的组 2.用户具有“家”目录的概念&#xff0c;当用户登录时&#xff0c;会自动进入到自己的家目录&#xff08;/home&#xff09; 例如&#xff1a;/home/user1…

配置了坐标还是找不到serv_你那么努力,为何还是找不到工作?从优势发展观来看个人职业发展...

扬子的大学专业是金融学&#xff0c;因为父母说学金融有前途&#xff0c;但扬子从小动手能力强&#xff0c;喜欢的是机械设计&#xff0c;因此他在大学期间还辅修了机械工程专业&#xff0c;大二的时候参加过一场业内的机械设计比赛还获得了二等奖&#xff0c;要知道一起参加比…

Linux如何查看所有用户和用户组信息(cat groups whoami)

1.cat /etc/passwd查看所有的用户信息 concatenate files and print on the standard output把文件连接后输出到屏幕上 cat /etc/passwd怎么看呢&#xff1f; 第一个user3是用户名&#xff0c;x是密码&#xff0c; 1002是用户id&#xff0c; 1002是用户组id&#xff0c; /home…

verilog 浮点转定点_定点数和浮点数

定点数定点数是指&#xff0c;数字在小数点之后和之前具有固定的位数。可以用Qm.n表示法进行表示.m位为整数部分 n位小数部分有符号数的总位数N m n 1当n0时&#xff0c;则定点数用来存储整数。定点数(整数)定点数可以用来存储整数&#xff0c;包括正整数和负整数。定点(整数…

Linux的实际操作:用户管理(删除用户userdel userdel -r)

首先需要查看当前有哪些用户 方法1&#xff1a; cat /etc/passwd 方法2&#xff1a; cd /home/ ll第一种删除&#xff08;温柔式-保留家目录&#xff09; userdel 用户名 &#xff08;首先&#xff0c;保证在root用户的前提下去删除&#xff09; 观察删除后的变化 第二种…

Linux的实际操作:查询用户id切换用户su -

1.查询用户信息&#xff1a;其中 &#xff08;uid是用户的id号&#xff0c;gid是用户组的id号&#xff0c;属于哪个组&#xff09; id 用户名 如果没有此用户&#xff0c;控制台就会返回信息“no such user” 2.切换用户&#xff1a; 在Linux操作中&#xff0c;如果当前的用户…

哔哩哔哩公司swot分析_「127」一个简单的工具分析自己的优势与劣势

今天要介绍的就是---SWOT分析方法。何谓SWOT&#xff0c;SWOT是由优势(Strength)、劣势(Weakness)、机会(Opportunity)和威胁(Threat)四个单词的第一个字母组成。SWOT分析是对组织或个人内外部条件各方面内容进行综合和概括&#xff0c;进而分析组织或个人的优劣势、面临的机会…

Linux的实际操作:用户管理(用户组的管理groupadd useradd usermod)

1.类似于管理角色&#xff0c;系统可以有共性的多个用户 2.增加一个用户组usergroup4 groupadd 新的用户组名 将user4指定到usergroup4中 useradd -g 用户组名 用户名 演示&#xff1a; 3.修改用户组 usermod -g 修改到的用户组名 用户名 创建一个usergroup5的用户组 将…

Linux的实际操作:用户管理(查看用户和组的配置文件/etc/passwd /etc/group /etc/shadow)

用户和用户组的相关文件 我们可以这样去理解&#xff0c;用户和用户组其实是我们虚构出来的东西&#xff0c;那这些东西肯定需要一个空间来存放他们吧&#xff0c;这个空间就是一些配置文件&#xff0c;里面可以完全查看你的用户或者用户组的信息&#xff0c;有些不过是进行了一…

拦截游戏窗口被移动_「维维足球pro-教案」50个传控踢法练习之(一、二)追球游戏...

如图所示&#xff0c;上方黄色虚线代表球的移动&#xff0c;中间黑色实线代表球员移动&#xff0c;下方黑色虚曲线代表球员带球移动。术语&#xff1a;卡斯特球员(kaasters)&#xff1a;荷兰语“回传”。指站在指定地点&#xff0c;在一或两次触球内接到传球并回传的球员。(即进…

Linux的实际操作:文件目录类的实用指令(init运行级别和找回root密码)

1.介绍运行级别 设计者把Linux系统设置为7个级别&#xff0c;常用的运行级别是3:&#xff08;程序员&#xff09;和5:&#xff08;普通访问用户&#xff09;&#xff0c;就好像Windows系统杀毒的时候会进入到安全模式一样 0&#xff1a;关机 1&#xff1a;单用户【用于找回丢…

linux内核怎么修改屏幕旋转方向_运维必备:常见的Linux系统故障及其排查的方法...

Linux是当前市场上比较常用的、自由开源操作系统&#xff0c;也是云计算运维人员日常工作中的好帮手。不过很多初学云计算的小伙伴面对Linux系统出现的故障束手无策&#xff0c;接下来千锋广州云计算培训小编就给大家分享几个常见的Linux系统故障及其排查的方法。​1、root密码…

Linux的实际操作:文件目录类的实用指令(帮助指令 man help)

1.人的脑容量有限&#xff0c;需要记忆很多东西&#xff0c;当我们对某个指令不熟悉时&#xff0c;这时候可以通过Linux简单的帮助指令就可以查询到该指令的使用方法 man 获得帮助信息 基本语法&#xff1a;&#xff08;记忆为&#xff0c;有问题找男人&#xff09; man ls 通…