课程内容
高并架构图
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 【勤于思考,夯实学习成果】阶段练习题