仿淘宝商城项目(分布式)

仿淘宝商城项目(分布式)

前言

暑假枯燥的生活令我乏味,学完了Java框架的我按捺不住,准备做一个项目练练手,巩固并提高对所学知识的理解及运用。
想了几天,也参考网上的推荐,很多都是××管理系统、OA系统、ERP等传统项目,但这些都激不起我的兴趣,因为最近对高级知识(高并发、分布式、人工智能)比较感兴趣。
无意间看到有人推荐电商项目,于是想到了淘宝。 在网上搜集大量资料,了解到要做一个淘宝商城并不简单,涉及到高并发、分布式等一些高级知识。
于是在网上找了相应的分布式Dubbo
这个淘宝项目基本涵盖了我所学习的所有知识和打算学的知识
我认为最好的学习方法就是用项目引导我们去学习,需要什么技术,我们就去学什么技术。这样可以很好的督促我们去学习。就比如之前我一直想学习分布式和高并发等相关知识,但是懒惰使我缺乏了激情。于是我苦苦寻找一个项目指引我进步,现在终于找到了,开干吧!!!

电商行业技术特点

微服务化是当前电商产品演化的必然趋势,与传统的项目相比,该行业技术要求相对较高,传统的项目1000高并发已经是上线了,但是在电商项目中,如淘宝,京东这样的。再举个例子,再淘宝双十一这天,如何满足高并发的需求和支付环节的安全都是难点。

  • 技术新且范围广
  • 分布式
  • 高并发、集群、负载均衡、高可用
  • 海量数据、业务复杂
  • 系统安全(因为涉及支付及隐私等)

用到的技术

如果不了解某项技术,先去网上找相关资源学习该技术,掌握基础的知识及用法再继续干。
项目搭建及版本控制:maven及svn
数据库:MySql
Ssm框架
服务中间件:dubbo(阿里巴巴的开源框架)

架构分析

传统架构:
在这里插入图片描述
分布式架构
在这里插入图片描述

分布式架构:将系统分成多个子系统,子系统之间需要相互协同完成业务逻辑。
集群:同一个工程部署到多个服务器上
优点:

  • 将模块拆分,子系统之间用接口调用,降低耦合度
  • 把项目拆分成各个子项目,不同的团队负责不同的子项目
  • 增加功能时只需要增加一个子项目,调用其他系统的接口即可
  • 可以灵活的进行分布式部署
    缺点:
  • 系统之间需要使用远程通信,接口开发增加了工作量
  • 系统之间的相同的业务逻辑无法共用

搭建项目目录结构

一、maven工程目录结构
在这里插入图片描述

二、pom.xml文件的配置
三、在pom.xml文件中配置tomcat插件,用maven运行调试项目是否搭建成功

MySql数据库的建立

在这里插入图片描述

逆向工程生成Pojo及Mapper

使用Mybatis提供的逆向工程生成Pojo及Mapper的代码

Ssm框架的整合

在子项目taobao-manager中,最后只有taobao-manager-service打成war包部署在服务器上,所以dao层、interface、pojo都会打包成jar包放在taobao-manager-service中。因此我们在service层配置mybatis和spring相关属性
在这里插入图片描述

dubbo和zookeeper的搭建及使用

介绍

dubbo:
dubbo是一个分布式服务中间件、负责远程通信,类似于webservice。是为了满足分布式的需求,是因为分布式的需求,所以才有了dubbo这个远程服务调用的分布式的框架。
其核心部分包括:

  • 远程通讯
  • 集群容错
  • 自动发现
    dubbo的架构
    在这里插入图片描述
    zookeeper:
    zookeeper 其实就是个管理员,监控 协调 所有需要同步的设备或进程
搭建

在CentOS 6.5下载openssh-server,方便使用secureCTR连接
命令:yum install openssh-server
查看和设置开机自动启动:chkconfig --list sshd chkconfig sshd on
启动openssh-server:service sshd start
在Linux系统上安装zookeeper
安装zookeeper之前需先安装jdk
执行这条命令:yum install java-1.8.0-openjdk* -y
无需配置环境变量,直接使用
①在线下载命令:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
②解压命令
tar -zxvf zookeeper-3.4.10.tar.gz
②创建data目录,并更改配置文件名称和其内容
[root@localhost zookeeper-3.4.10]# mkdir data
[root@localhost conf]# mv zoo_sample.cfg zoo.cfg

the directory where the snapshot is stored.
do not use /tmp for storage, /tmp here is just
example sakes.
dataDir=/root/zookeeper-3.4.10/data
④启动和关闭zookeeper
可以配置环境变量
也可以在bin目录中用:
[root@localhost bin]# ./zkServer.sh start
[root@localhost bin]# ./zkServer.sh stop

在pom.xml文件中配置dubbo和zookeeper框架(记得把dubbo依赖引入的低版本spring框架exclusion,以免发生冲突)

使用

在这里插入图片描述

写一个Service测试是否搭建成功
在com.taobao.service包中写一个ItemService。
发布dubbo服务:
记得在pom.xml文件中引入Dao、Interface等依赖。
在applicationContext-service.xml中配置发布dubbo服务
①引入dubbo标签
②发布dubbo服务(service层)

<!--发布dubbo服务-->
    <!--提供方应用信息,用于计算机依赖-->
    <dubbo:application name="taobao-manager"/>
    <!--注册中心的地址-->
    <dubbo:registry protocol="zookeeper" address="192.168.65.132:2181"/>
    <!--用dubbo协议在20880端口暴露服务-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!--声明需要暴露的服务接口
 itemServiceImp会由包扫描器扫描后自动创建bean对象,所以可以直接使用-->
    <dubbo:service interface="com.taobao.service.ItemService" ref="itemServiceImp"/>

引用dubo服务(web层)
在这里插入图片描述

  • pom.xml配置Dubbo相关jar包(记得排除低版本的spring依赖)和Interface依赖。

    <dubbo:application name=“taobao-manager-web”/>
    <dubbo:registry protocol=“zookeeper” address=“192.168.65.132:2181”/>
    <dubbo:reference interface=“com.taobao.service.ItemService” id=“itemService”/>
    测试dubbo服务
    1、在Controller层写一个测试实例:

    @Controller
    public class ItemController {
    @Autowired
    private ItemService itemService;
    @RequestMapping("/item/{itemId}")
    @ResponseBody
    public TbItem getItemById(@PathVariable Long itemId){
    TbItem tbItem=itemService.getItemById(itemId);
    return tbItem;
    }
    }
    2、用maven启动taobao-manager子项目和taobao-manager-web子项目
    出现的问题:
    问题一、Mapper.xml文件没有发布的问题:
    maven不会自动扫描和Mapper.java文件放在一起的xml文件,可以放在Resource文件夹里面可以被自动扫描,但是我们习惯和Mapper.java放在一起。所以要在applicationContext.xml文件里面定义

问题二、zookeeper连接可能出现的问题:

  • 缺少依赖包
    com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.connect(CuratorZookeeperTransporter.java:26)
  • zookeeper没有开启:
    at com.alibaba.dubbo.registry.support.FailbackRegistry.register
  • Linux系统防火墙没有关闭(防火墙端口设置)
    防火墙端口关闭命令:chkconfig iptables off
    在这里插入图片描述

问题三、POJO没有implements Serializable 出现的问题:
“持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间。通过序列化一个对象,将其写入磁盘,以后在程序再次调用时重新恢复那个对象,就能圆满实现一种“持久”效果。

  • 远程方法调用(RMI)使本来存在于其他机器的对象可以表现出好象就在本地机器上的行为。将消息发给远程对象时,需要通过对象序列化来传输参数和返回值。
  • 使用一个Java Bean 时,它的状态信息通常在设计期间配置好。程序启动以后,这种状态信息必须保存下来,以便程序启动以后恢复;具体工作由对象序列化完成。

问题四、dubbo-admin启动出现的问题:

 Could not load [com.alibaba.dubbo.common.utils.NetUtils]

原因:dubbo-admin版本太低,jdk8不适用。考虑升级dubbo-admin的版本

问题五:@Autowired依赖注入失败的问题

严重: StandardWrapper.Throwable
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'itemController': Unsatisfied dependency expressed through field 'itemService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemServiceImp': FactoryBean threw exception on object creation; nested exception is java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy

原因:可能是dubbo和spring初始化bean对象的顺序导致dubbo的bean对象没有初始化成功。也可能是因为dubbo支持低版本的spring,但是我换了低版本的依旧不行。最后查询了github官网上dubbo项目的issue,dubbo框架确实存在各种关于依赖注入,reference等问题都没有得到有效的解决方案。我进一步猜测应该是dubbo框架只是一个小组件,没有完全兼容现有的版本的Spring框架,然后dubbo官方也没有花精力去维护更新dubbo,所以导致各种问题没有得到有效解决。

未完待续。。。

仿淘宝的B2C商城项目,后台功能基本完善,前端展示简单,近期上线,求前端大神参与,立志完善成商业版,有意参与者请联系我:nietaooldman@126.com 仿淘宝的B2C商城项目 一、项目介绍: 本项目使用SSH框架和MySQL数据库。实现Spring对Hibernate和Struts的整合。目前实现功能:(1)前台功能:用户注册、商品展示、购物车功能(商品进行添加、删除、修改、查看操作),订单提交。(2)后台功能:商品增删改查和订单管理。(3)商品搜索(搜索内容进行分词,提取关键字,模糊查询)。(4)QQ在线咨询功能。本项目基本实现完整的B2C网站的功能。 二、项目部署: 本项目使用Eclipse_EE + Tomcat7.0+ MySql5.6的开发环境。 1、安装 Eclipse_EE、Tomcat、MySql软件。 2、MySql数据库中创建shop数据库。 (1)CREATE DATABASE shop CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci ; (2)本项目中sql/shop.sql,执行shop.sql,SQL语句创建各种表单,和默认管理员用户 ,默认普通用户。管理员用户名:admin,密码:123.普通用户的用户名:throne212,密码 123. 3、本网站源码导入Eclipse中,网站就可以运行。 ../Shop/manager/index.jsp为后台管理界面。 三、网站近期上线 本人是电子科大的研究生,擅长网站后台开发,后台功能基本完善,前台页面展示简单,如果你感兴趣,就可以参与进来,立志完善成商业版,有意参与者请和我联系: 邮箱:nietaooldman@126.com qq群:330242176
仿淘宝多用户网络商城购物系统正式sql版后台功能描述: 网站系统管理,综合信息设置 商城新闻管理 商城新闻分类,商城新闻模板,商城新闻管理,商城添加新闻,商城店铺管理 商家网店管理 推荐明星店铺,二级域名管理,商城最新订单,店铺新闻管理,店铺客户服务,店铺留言管理,店铺信息修改 商城BBS管理 增加论坛分类,全部版块管理,增加论坛版块,论坛版主添加,认证会员添加,论坛版主删除,认证会员删除,论坛内容管理,贴子批量删除,认证会员列表 商品类别管理 商城会员管理 会员列表管理,商城之星管理 首页广告管理,网站广告图片 网站商品管理 所有产品管理,商品拍卖控制,商品推荐产品 商城留言评论 商城客服中心,商城留言管理 系统管理安全 增加商城管理员,管理商城管理员,系统安全扫描工具 网站统计中心 网站流量统计,网站受攻击记录,管理后台登陆记录,网站推广登陆申请 网站友情链接 首页/论坛友情连接,添加友情连接 仿淘宝多用户网络商城购物系统正式sql版商家平台功能 二级域名管理 商家在线认证,支付宝帐号管理,联系信息管理,企业简介管理,配送方式管理,售后服务管理,店铺密码修改,店铺LOGO管理,个性模板管理 我的商品管理 商品类别管理,商品在线添加,产品在线管理,添加拍卖商品,拍卖查看结果,店铺评论管理 我的订单管理 店铺在线订单,店铺电话订单,商品销售报表,店铺送货清单,店铺会员列表 我的日常管理 店铺新闻管理,店铺客服中心,店铺留言管理,店铺推广登陆,我的店铺预览
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值