GO-电商秒杀系统

课程内容

高并架构图
在这里插入图片描述

2-1 需求分析

2-2 原型需求分析

2-3 系统架构设计

在这里插入图片描述
3-1 RabitMq 环境安装

在window启动RabitMq 启动出现如下错误,请看这篇博客

DIAGNOSTICS
===========

attempted to contact: [rabbit@MVUIBUDNQI33TUM]

rabbit@MVUIBUDNQI33TUM:
  * connected to epmd (port 4369) on MVUIBUDNQI33TUM
  * epmd reports node 'rabbit' uses port 25672 for inter-node and CLI tool traffic
  * TCP connection succeeded but Erlang distribution failed

  * Authentication failed (rejected by the remote node), please check the Erlang cookie

启动成功
在这里插入图片描述
在这里插入图片描述
3-2 RabbitMQ常用命令及管理界面

1、以应用方式启动

rabbitmq-server -detached 后台启动

Rabbitmq-server 直接启动,如果你关闭窗口或者需要在改窗口使用其他命令时应用就会停止

 关闭:rabbitmqctl stop

2、以服务方式启动(安装完之后在任务管理器中服务一栏能看到RabbtiMq)

rabbitmq-service install 安装服务

rabbitmq-service start 开始服务

Rabbitmq-service stop  停止服务

Rabbitmq-service enable 使服务有效

Rabbitmq-service disable 使服务无效

rabbitmq-service help 帮助

当rabbitmq-service install之后默认服务是enable的,如果这时设置服务为disable的话,rabbitmq-service start就会报错。

当rabbitmq-service start正常启动服务之后,使用disable是没有效果的

  关闭:rabbitmqctl stop

3、Rabbitmq 管理插件启动,可视化界面

rabbitmq-plugins enable rabbitmq_management 启动

rabbitmq-plugins disable rabbitmq_management 关闭

在这里插入图片描述

3-3 RabbitMQ核心概念

  • vittual host 区分队列,隔离账号
    Server: 又称Broker, 接受客户端的连接,实现AMQP实体服务,这里指RabbitMQ 服务器

Connection: 连接,应用程序与Broker的网络连接。

**Channel: **网络信道,几乎所有的操作都在 Channel 中进行,Channel是进行消息读写的通道。客户端可建立多个Channel:,每个Channel代表一个会话任务。

**Virtual host: **虚似地址,用于迸行逻辑隔离,是最上层的消息路由。一个 Virtual Host 里面可以有若干个 Exchange和 Queue ,同一个 VirtualHost 里面不能有相同名称的 Exchange 或 Queue。权限控制的最小粒度是Virtual Host。

Binding: Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key。

Routing key: 一 个路由规则,虚拟机可用它来确定如何路由一个特定消息,即交换机绑定到 Queue 的键。

Queue: 也称为Message Queue,消息队列,保存消息并将它们转发给消费者。

建立账号
在这里插入图片描述
3-4 RabbitMQ工作模式—Simple模式(上)
https://www.cnblogs.com/haixiang/p/10853467.html
3-5 RabbitMQ工作模式—Simple模式(中)

package main

import (
	"fmt"
	"log"

	"github.com/streadway/amqp"
)

const MQURL = "amqp://immocuser:[email protected]:5672/imoooc"

type RabbitMQ struct {
	conn    *amqp.Connection
	channel *amqp.Channel

	QueueName string
	Exchange  string
	Key       string
	Mqurl     string
}

// 创建RabbitMQ 结构体实例
func NewRabbitMQ(queueName string, exchange string, key string) *RabbitMQ {

	rabbitmq := &RabbitMQ{QueueName: queueName, Exchange: exchange, Key: key, Mqurl: MQURL}

	// 创建简单模式的RabbitMQ实例

	var err error
	// 连接 rabbitmq
	rabbitmq.conn, err = amqp.Dial(rabbitmq.Mqurl)
	rabbitmq.failOnErr(err, "创建连接错误")

	rabbitmq.channel, err = rabbitmq.conn.Channel()
	rabbitmq.failOnErr(err, "获取channel 失败")
	return rabbitmq

}

// close RabbitMQ channel and connection
func (r *RabbitMQ) Destory() {
	r.channel.Close()
	r.conn.Close()
}

// err handler
func (r *RabbitMQ) failOnErr(err error, message string) {
	if err != nil {
		log.Fatalf("%s%:s", message, err)
		panic(fmt.Sprintf("%s:%s", message, err))
	}
}

//  创建简单模式的RabbitMQ实例
func NewRabbitSimple(queueName string) *RabbitMQ {
	return NewRabbitMQ(queueName, "", "")

}

// 简单模式
func (r *RabbitMQ) PublishSimple(message string) {
	// 1. 申请队列, 不存在则自动创建, 存在则跳过
	//    作用: 保证消息发送队列中
	_, err := r.channel.QueueDeclare(
		r.QueueName,
		// 是否持久化
		false,
		//是否自动删除
		false,
		// 是否排他
		false,
		// 是否阻塞
		false,
		nil,
	)
	if err != nil {
		fmt.Println(err)
	}

	// 发送消息到队列中
	r.channel.Publish(
		// 交换机
		r.Exchange,
		r.QueueName,
		// true会根据Exchange类型如果无法找到条件的队列,会把消息返回
		false,
		// true Exchange发送消息到队列上,没有发现绑定消费者,会返回
		false,
		// 发送信息格式
		amqp.Publishing{
			ContentType:"text/plain",
			Body:[]byte(message),

		}
	)
}

func main() {
	fmt.Print("6666")
	fmt.Println("")
	fmt.Println("666")
}

自闭中。。。后续再写这个项目吧。。。

3-6 RabbitMQ工作模式—Simple模式(下)

3-7 RabbitMQ工作模式—Work模式

3-8 RabbitMQ工作模式—Publish模式试看

3-9 RabbitMQ工作模式—Routing模式

3-10 RabbitMQ工作模式—Topic模式

3-11 【扩展资料】CentOS7 之基础设置及常见操作命令

3-12 【阶段总结】环境搭建之初识RabbitMQ

3-13 【勤于思考,夯实学习成果】阶段练习题

猜你喜欢

转载自blog.csdn.net/weixin_43746433/article/details/106063288