百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

分布式-zookeeper+dubbo入门demo dubbo分布式事务问题

yuyutoo 2024-10-26 16:09 6 浏览 0 评论

完成这个demo的搭建,先简单说一下dubbo常识的概念

1.什么是SOA架构

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

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

2.Dubbo框架

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

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

3.Dubbo框架原理

节点角色说明:

· 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.xsd
 http://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 {
 @Override
 public String getName() {
 return "zhiliaotang...";
 }
}

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

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

(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配置文件

(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 {
 @Reference
 private UserService userService; // 依赖注入UserService
 @RequestMapping("/index")
 @ResponseBody
 public 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.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">
 <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

相关推荐

野路子科技!2步教你把手机改造成一个FTP服务器,支持PC互传

哈喽,大家好,我是野路子科技,今天来给大家带来一个教程,希望大家喜欢。正如标题所言,就是教大家如何把售价改造成FTP服务器,而这个时候估计有朋友会问了,把手机改造成FTP服务器有什么用呢?现在有Q...

不得不看:别样于Server-U的群晖文件存储服务器的搭建与使用

我先前的作品中,有着关于Server-U的ftp文件存储服务器的搭建与访问的头条文章和西瓜视频,而且我们通过各种方式也给各位粉丝介绍了如何突破局域网实现真正意义上的公网访问机制技术。关于Server-...

Qt三种方式实现FTP上传功能_qt引入qftp库

FTP协议FTP的中文名称是“文件传输协议”,是FileTransferProtocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经...

Filezilla文件服务器搭建及客户端的使用

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户...

美能达柯美/震旦复印机FTP扫描怎么设置?

好多网友不知道怎么安装美能达/震旦复印机扫描,用得最多是SMB和FTP扫描,相对于SMB来说,FTP扫描安装步骤更为便捷,不容易出问题,不需要设置文件夹共享,所以小编推荐FTP来扫描以美能达机器为例详...

CCD(简易FTP服务器软件)_简单ftp服务器软件

CCD简易FTP服务器软件是一款很方便的FPT搭建工具,可以将我们的电脑快速变成一个FPT服务器。使用方法非常简单,只要运行软件就会自动生效,下载银行有该资源。该工具是不提供操作界面的,其他用户可以输...

Ubuntu系统搭建FTP服务器教程_ubuntu架设服务器

在Ubuntu系统上搭建FTP服务器是文件传输的一个非常实用方法,适合需要进行大量文件交换的场景。以下是一步步指导,帮助您在Ubuntu上成功搭建FTP服务器。1.安装vsftpd软件...

理光FTP扫描设置教程_理光ftp扫描设置方法

此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER201220162018里使用了新的SMB传...

纯小白如何利用wireshark学习网络技术

写在前面工欲善其事必先利其器!熟悉掌握一种神器对以后的工作必然是有帮助的,下面我将从简单的描述Wireshark的使用和自己思考去写,若有错误或不足还请批评指正。...

京东买13盘位32GB内存NAS:NAS系统安装设置教程

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:yasden你没有看错,我在京东自营商城购买硬件,组装了一台13盘位,32GB内存的NAS,硬盘有13个盘位!CPU是AMD的5500!本文...

FileZilla搭建FTP服务器图解教程_filezilla server搭建ftp服务器

...

python教程之FTP相关操作_python ftps

ftplib类库常用相关操作importftplibftp=ftplib.FTP()ftp.set_debuglevel(2)#打开调试级别2,显示详细信息ftp.connect(“I...

xftp怎么用,xftp怎么用,具体使用方法

Xftp是一款界面化的ftp传输工具,用起来方便简单,这里为大家分享下Xftp怎么使用?希望能帮到有需要的朋友。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新...

树莓派文件上传和下载,详细步骤设置FTP服务器

在本指南中,详细记录了如何在树莓Pi上设置FTP。设置FTP可以在网络上轻松地将文件传输到Pi上。FTP是文件传输协议的缩写,只是一种通过网络在两个设备之间传输文件的方法。还有一种额外的方法,你可以用...

win10电脑操作系统,怎么设置FTP?windows10系统设置FTP操作方法

打印,打印,扫描的日常操作是每一个办公工作人员的必需专业技能,要应用FTP作用扫描文件到电脑上,最先要必须一台可以接受文件的FTP服务器。许多软件都需要收费标准进行,但人们还可以应用Windows的系...

取消回复欢迎 发表评论: