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

前言

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

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

后端代码: 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/

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

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

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

相关文章

解决MySQL中整型字段条件判断禁用不生效的问题

MySQL中,当尝试将整数与字符串进行比较时,数据库可能会尝试将字符串转换为整数。在这种情况下,空字符串会被转换为整数0,所以0 ! 会被解释为0 ! 0,结果自然是false。 在开发过程中,我们经常需要对数据库中的…

大数据技术在金融风控中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 大数据技术在金融风控中的应用 引言 大数据技术概述 定义与原理 发…

微信小程序_模板与配置_day2

一、目标 A. 能够使用WXML模板语法渲染页面结构 B. 能够使用WXSS样式装饰页面结构 C. 能够使用app.json对小程序进行全局性配置 D. 能够使用page.json对小程序页面进行个性化配置 E. 能够知道如何发起网络数据请求 二、目录 A. WXML模板语法 B. WXSS模板样式 C. 全局配置 D.…

网络安全技术在能源领域的应用

摘要 随着信息技术的飞速发展,能源领域逐渐实现了数字化、网络化和智能化。然而,这也使得能源系统面临着前所未有的网络安全威胁。本文从技术的角度出发,探讨了网络安全技术在能源领域的应用,分析了能源现状面临的网络安全威胁&a…

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责:每个类应该有一个明确的职责,避免将多个责任混合在一起。降低耦合:通过将不同的职责分开,可以降低类之间的耦合度,提高系统的灵活性。易于维护:当…

nvm 安装指定node版本时--list 显示为空

1、安装nvm 2、查看nvm 可安装的list 语句: nvm list available 注: 可能需要安装的不在list 中,可直接 用命令语句 安装指定版本 nvm install 12.18.1 如果安装list 显示为空 找到安装路径下的 settings.txt,最后两行没有的添加上&#x…

[HNCTF 2022 Week1]ret2shellcode-好久不见12

知识点:1.shellcode获取 获取Shellcode的两种方法: 手写:想办法调用execve("/bin/sh",null,null) 传入字符串:/bin///sh 系统调用execve pwntools自动生成: 先指定context.arch"i386/amd64" …

实现3D热力图

实现思路 首先是需要用canvas绘制一个2D的热力图,如果你还不会,请看json绘制热力图。使用Threejs中的canvas贴图,将贴图贴在PlaneGeometry平面上。使用着色器材质,更具json中的数据让平面模型 拔地而起。使用Threejs内置的TWEEN&…

力扣 LeetCode 977. 有序数组的平方(Day1:数组)

解题思路: 方法一:先平方再快排 方法二:双指针 因为可能有负数,所以对于一个数组 [ -5 , -3 , 0 , 2 , 4 ] 可以从两边向内靠拢,最大值一定出现在两端 设置指针 i 和指针 j 分别从左右两边靠拢 因为要从小到大排序…

[vulnhub] DarkHole: 1

https://www.vulnhub.com/entry/darkhole-1,724/ 端口扫描主机发现 探测存活主机,184是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 09:59 CST Nmap scan report for 192.168.75.1 Host is up (0.00027s latency). MA…

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue3校园宿舍管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…

docker基础:搭建centos7(详见B站泷羽sec)

docker的简单学习: sudo apt-get update //这个命令让系统检查有没有新软件 sudo apt-get install docker.io //安装 Docker sudo docker version //查看是否安装成功,显示docker的版本信息 启用Docker 启…

Vue3入门介绍及快速上手

vue3 文章目录 vue31、概况2、快速入门3、常用指令3.1、v-for3.2、v-bind3.3、 v-if & v-show3.4、v-model3.5、 v-on 4 生命周期5、 工程化5.1、环境准备5.2、Vue项目-创建5.3、Vue项目开发流程5.4、组合式API5.5、reactive和ref函数5.6、watch5.7、父子组件通信 6、Vue路…

【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】

文章目录 OpenOCD arp_examine 使用 OpenOCD arp_examine 使用 因为我们很多时候运行 Openocd 的时候有些 core 还没有启动, 所以最好在配置脚本中添加 -defer-examine这个参数, 如下: #cortex-m33 target create ${_CHIPNAME}.m33 cortex_m -dap ${_CHIPNAME}.da…

【大数据学习 | kafka高级部分】kafka的kraft集群

首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举,并且记录topic和partition的元数据信息,帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成,而不再依赖zookeeper。…

用户裂变数据分析

用户增长是一个工作和找工作的时候都不可避免的话题,那么用户增长,该怎么做数据分析?本文从两个方面分享了大部分企业做用户增长的方法,希望对你有所帮助。 01 用户增长的基本办法 1. 买量 在互联网公司中,买量是占…

论文分享:DiskANN查询算法

详细总结了三篇有关DiskANN最邻近查询图算法的论文 欢迎大家来点赞,更欢迎感兴趣的友友来探讨! DiskANN的提出(NurIPS’19)文献分享: Vamana图算法以及面向SSD的DiskANN文章浏览阅读797次,点赞21次,收藏8次。NurIPS‘19_vamana图…

第16章 SELECT 底层执行原理

一、SELECT查询的完整结构 1.1 方式一(SQL 92语法) SELECT ..., ..., ... FROM ..., ..., ... WHERE 多表的连接条件 AND 不包含组函数的过滤条件 GROUP BY ..., ... HAVING 包含组函数的过滤条件 ORDER BY ... ASC/DESC LIMIT ..., ... 1.2 方式二&a…

【设计模式】结构型模式(四):组合模式、享元模式

《设计模式之结构型模式》系列,共包含以下文章: 结构型模式(一):适配器模式、装饰器模式结构型模式(二):代理模式结构型模式(三):桥接模式、外观…