微服务电商平台课程三:搭建后台服务

前言

上节课,我们一起完成基础环境搭建,这节课, 我们利用上节课搭建我们电商平台.这节课我们采用开源代码进行搭建, 不论大家后续从事什么行业,都要学会站在巨人的肩膀上.

之前所说的,整个微服务平台的技术栈也是非常多的, 由于时间和效果的关系, 我们不可能从每个技术一步一步学习, 再应用. 我们先完成整个平台搭建, 然后着重挑选代表性的内容进行深入学习(这块内容就会深入学习源码),最后大家针对自身的需求, 进行修改源码, 从而全面了解整个微服务平台

后端代码: https://github.com/macrozheng/mall

             https://gitee.com/macrozheng/mall(国内)

后台管理前端: https://github.com/macrozheng/mall-admin-web

用户前端:https://github.com/macrozheng/mall-app-web?tab=readme-ov-file

搭建

后端代码

(1) 克隆源码

Shell
git clone https://github.com/macrozheng/mall.git

(2) 用idea打开上述下载的源码

(3)安装依赖包

maven配置

(4) 安装依赖包

项目中一般使用maven进行模块管理,每个模块下对应都有一个pom文件,pom文件中维护了各模块之间的依赖和继承关系。,其中packing 类型有很多种,我们最新使用就是pom类型和jar类型。更多类型说明参考:https://www.baeldung.com/maven-packaging-types

其中pom类型介绍:

(1)pom工程用于父级或聚合工程,管理版本控制;

(2)分模块都会有一个父级项目,pom文件一个重要的属性就是packaging(打包类型),一般来说所有的父级项目的packaging都为pom。

(3)pom更多是依赖关系的一种说明。maven不会将其打包,而是将底下的模块分别进行打包,针对多个服务方式可以使用这种方式快速打包。

(5)熟悉源码结构

Shell
mall
├── mall-common -- 工具类及通用代码
├── mall-mbg -- MyBatisGenerator生成的数据库操作代码
├── mall-security -- SpringSecurity封装公用模块
├── mall-admin -- 后台商城管理系统接口   是服务
├── mall-search -- 基于Elasticsearch的商品搜索系统   是服务
├── mall-portal -- 前台商城系统接口  是服务
└── mall-demo -- 框架搭建时的测试代码

(6)启动服务

2种方式

6.1: maven package

6.2 debug方式

我们会出现以下结果

虽然之前代码依赖(使用别人的包)已经安装, 但是上节课说的mysql、redis等中间件还没安装, 导致程序因为依赖这些中间件,无法启动。

解决这个问题就是安装这些中间件, 2种方法安装:

第一种,像上节课《微服务电商平台课程三:基础环境搭建》那样, 下载-安装-配置 ,可以参考https://www.macrozheng.com/mall/start/mall_deploy_windows.html#rabbitmq

第二种,推荐方式docker方式,进行安装, docker安装方式,快速,基本不会报错。

这时有人肯定会问,那为什么上节课不用docker方式安装,害我白白浪费那么多时间。其实理论是可以的,docker镜像丰富多样,支持很多软件、服务。

优势:大家电脑都可以快速安装,基本上不会出现上节课,有的人安装有问题,有的人安装没没问题。

docker镜像使用没有本地安装方便,大部分是命令行交互,所以针对习惯一些UI的服务和程序,建议还是本地安装方式

(7)docker安装中间件

Shell
version: '3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root #设置root帐号密码
    ports:
      - 3306:3306
    volumes:
      - /d/docker_env/mysql/data:/var/lib/mysql #数据文件目录挂载
      - /d/docker_env/mysql/conf/my.conf:/etc/my.conf#配置文件目录挂载
      - /d/docker_env/mysql/log:/var/log/mysql #日志文件目录挂载
  redis:
    image: redis:7
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - /d/docker_env/redis/data:/data #数据文件目录挂载
    ports:
      - 6379:6379
  nginx:
    image: nginx:1.22
    container_name: nginx
    volumes:
      - /d/docker_env/nginx/conf:/etc/nginx #配置文件目录挂载
      - /d/docker_env/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
      - /d/docker_env/nginx/logs:/var/log/nginx #日志文件目录挂载
    ports:
      - 80:80
  rabbitmq:
    image: rabbitmq:3.9.11-management
    container_name: rabbitmq
    volumes:
      - /d/docker_env/rabbitmq/data:/var/lib/rabbitmq #数据文件目录挂载
    ports:
      - 5672:5672
      - 15672:15672
  elasticsearch:
    image: elasticsearch:7.17.3
    container_name: elasticsearch
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx1024m" #设置es使用的jvm内存大小
    volumes:
      - /d/docker_env/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件目录挂载
      - /d/docker_env/elasticsearch/data:/usr/share/elasticsearch/data #数据文件目录挂载
    ports:
      - 9200:9200
      - 9300:9300
  logstash:
    image: logstash:7.17.3
    container_name: logstash
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /d/docker_env/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #配置文件挂载
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    ports:
      - 4560:4560
      - 4561:4561
      - 4562:4562
      - 4563:4563
  kibana:
    image: kibana:7.17.3
    container_name: kibana
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
    ports:
      - 5601:5601
  mongo:
    image: mongo:4
    container_name: mongo
    volumes:
      - /d/docker_env/mongo/db:/data/db #数据文件目录挂载
    ports:
      - 27017:27017
  minio:
    image: minio/minio
    container_name: minio
    command: server /data --console-address ":9001" #指定数据目录及console运行端口启动
    volumes:
      - /d/docker_env/minio/data:/data #数据目录挂载
    environment:
      - "MINIO_ROOT_USER=minioadmin"
      - "MINIO_ROOT_PASSWORD=minioadmin"
    ports:
      - 9090:9000
      - 9001:9001

注意mysql镜像需要增加my.cnf配置文件, logstash需要配置文件logstash.conf

配置文件说明

  • [client] 部分包含了 MySQL 客户端的配置,确保客户端使用 UTF-8 字符集。
  • [mysql] 部分也配置了 MySQL 客户端的默认字符集。
  • [mysqld] 部分包含了 MySQL 服务器的配置选项,用于配置 MySQL 服务器的行为。

default-character-set=utf8mb4 和 default-character-set=utf8mb4:这两个选项在 [client] 和 [mysql] 部分都设置了默认字符集为 UTF-8,确保客户端和服务器使用相同的字符集。

init_connect='SET collation_connection = utf8mb4_unicode_ci' 和 init_connect='SET NAMES utf8mb4':这些选项在 [mysqld] 部分设置了初始化连接时执行的 SQL 语句。这些语句设置了连接的字符集和排序规则为 UTF-8 和 utf8mb4_unicode_ci

character-set-server=utf8mb4:这个选项设置了 MySQL 服务器的字符集为 UTF-8。

collation-server=utf8mb4_unicode_ci:这个选项设置了 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,通常用于支持国际化和多语言字符的正确排序。

skip-character-set-client-handshake:这个选项用于禁用客户端字符集握手,允许客户端和服务器之间的字符集设置更加灵活。

skip-name-resolve:这个选项禁用了主机名解析,以提高连接性能。

logstash配置

Shell
docker compose -f  docker-compose-env-win.yml up -d
docker compose  -f  docker-compose-env-win.yml ps
docker compose up -d
#启动服务
docker-compose start
#停止服务
docker-compose stop
#重启服务
docker-compose restart

(8) 创建数据库和数据库表

Rabbitmq配置

默认guest:guest账号和密码

新增用户mall:mall

  • 创建一个新的虚拟host为,名称为/mall
  • 点击mall用户进入用户配置页面;
  • 给mall用户配置该虚拟host的权限,至此,RabbitMQ的配置完成。

Elasticsearch配置,下载https://github.com/infinilabs/analysis-ik/releases?page=6插件,对应版本的analysis-ik插件, 并解压指定的位置。

(9) 再次启动服务

(9.1) 启动mall-admin服务

打开swagger地址:

http://localhost:8080/swagger-ui/

如果可以打开说明,后台管理服务启动正常

(9.2) 启动 mall-search服务

http://localhost:8081/swagger-ui/

(9.3)启动mall-portal服务

http://localhost:8085/swagger-ui/

到此,后端服务都可以正常启动了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

模拟 [leecode 54] 螺旋矩阵

一、题解:上下左右四条线不断收紧 int l 0, r matrix[0].size() - 1;int high 0, low matrix.size() - 1;从左到右,顶部一层遍历完往下移一位,high;if(high>low) break;//遍历完了从上到下,遍历完右侧往左移一位…

丹摩征文活动|Llama3.1的部署与使用指南

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 丹摩征文 1. 初识Llama3.12. 部署流程创建实例登录实例部署LLama3.1 3. 实践使用教程4. 实践感想 前言:人工智能(AI&…

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事 在这个世上,每个人都是一座孤岛,但通过人际交往这座桥梁,我们能够彼此相连,共同编织出一张温暖的社会网络。 好人缘&a…

Sql server 备份还原方法

备份 方法1,选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表,视图,存储过程等) 选择对应的 服…

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL

在当今数字化时代,安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台,它不仅提供了视频远程监控、录像、存储与回放等基础功能,还涵盖了视频转码、视频快照、…

【MySQL】数据库知识突破:数据类型全解析与详解

前言:本节内容讲述MySQL的数据类型, 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作, 并没有对数据的内容进行操作,所以它叫做DDL。另外,还有…

管理 Elasticsearch 变得更容易了,非常容易!

作者:来自 Elastic Ken Exner Elasticsearch 用户,我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂,面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天,我们宣布了自收购 Opster 以来的一…

Android Parcelable和Serializable的区别与联系

在Android开发中,Parcelable和Serializable是两种用来在组件之间传递数据的序列化机制。它们有不同的使用场景和性能特点。 以下是它们之间的关系和区别: 1. 什么是 Parcelable Parcelable 是 Android 特有的接口,用于高效地在进程间传递数…

Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载

Moonshine 是由 Useful Sensors 公司推出的一系列「语音到文本(speech-to-text, STT)转换模型」,旨在为资源受限设备提供快速而准确的「自动语音识别(ASR)服务」。Moonshine 的设计特别适合于需要即时响应的应用场景&a…

GitHub桌面版汉化

桌面版下载地址 https://desktop.github.com/ 汉化包下载地址 Releases cngege/GitHubDesktop2Chinese GitHub 点击运行 重启后

linux-vlan(1)

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中,都有网络组件用于加载网页,鸿蒙ArkTS中也有类似的组件。   web组件,用于加载指定的网页,里面有很多的方法可以调用,虽然现在用得比较少,了解还是必须的。   演…

屏幕解析工具——OmniParser

0 引言 OmniParser是微软开源的一种屏幕解析工具,提供了一种将用户界面截图解析为结构化元素的综合方法,通过此方法可以对UI界面进行可交互元素的提取和描述,然后将此结构化信息和任务指令,输入到大模型中,以增强大模…

string------1

文章目录 一. STL1.概念2.版本 二. string类2.1 为什么学习string类2. 标准库中的string类2.2.1 构造(7个)2.2.2 对string类对象进行“访问和修改”(1)operator[](2)迭代器1.迭代器的使用2.迭代器的价值&am…

Docker-软件容器平台

一、容器 1、什么是容器 容器就是将软件打包成标准化单元,以用于开发、交付和部署 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示(LCD)技术的电视类型,但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

速通LoRA:《LoRA: Low-Rank Adaptation of Large Language Models》全文解读

文章目录 总览AbstractIntroductionProblem StatementAren’t Existing Solutions Good Enough?Our MethodLow-Rank-Parametrized Update MatricesApplying LoRA to Transformer 何为高斯随机初始化Empirical ExperimentsBaselinesRoBERTa base/largeDeBERTa XXLGPT-2 medium/…

计算机图形学论文 | 木工设计与制造计划的共同优化

🦌🦌🦌读论文 我们的系统共同探索离散设计变量和制造计划的空间,以生成(设计,制造计划)对的帕累托前沿,使制造成本最小化。在该图中,(a)是椅子的输入设计和仅探索该设计的…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法

在当今社会,安全监控已成为各类场所不可或缺的一部分。无论是家庭、学校、商业场所还是公共场所,安全监控设备都扮演着至关重要的角色。在众多监控品牌中,大华IPC摄像头凭借其高清画质、强大功能和卓越稳定性,赢得了市场的广泛认可…

phpcms-tree(PHP无限级别分类)

phpcms-tree,是一个从PHPCMS v9最新版中提取出来的无限级别分类的源码,可以整合到任何项目中。 使用方法 参考Src/index.php里的实例。 源码下载: 支持本程序,请到Gitee和GitHub给我们点Star! Gitee:p…