目录
docker 安装
redis 安装
rabbitmq
mysql
nacos
方式一:
方式二:
验证
rocketmq
nameServer
broker
console
注意
测试
网页访问
pom依赖
消费者
生产者
mongodb
注意:以下所有的安装都是在开发环境作为测试使用,生产环境的安装配置要复杂很多
docker 安装
redis 安装
docker search redis
docker pull redis
设置密码为 123456
docker run -itd --name redis-test -p 6379:6379 redis --requirepass 123456
docker exec -it redis-test /bin/bash
rabbitmq
docker search rabbitmq
docker pull rabbitmq
docker run -itd --name rabbitmqMy -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq
进入rabbitmq 的终端执行
开启页面管理功能
rabbitmq-plugins enable rabbitmq_management
访问地址 localhost:15672
参数介绍:
docker run -d --name rabbitmqMy -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq
-d 后台运行容器;
--name 指定容器名;
-p 指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号);
-v 映射目录或文件;
--hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
-e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
手动推送数据
mysql
docker pull mysql:8.0.11
mac m1 芯片下载的时候出现
Using default tag: latest
latest: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries
解决方式:指定使用linux内核的镜像(m1芯片可以运行inter芯片的程序,但是所有指令的执行都需要进行一次转换,没有直接使用m1架构的软件速度快)
docker pull --platform linux/x86_64 mysql:8.0.20
注意,在启动的时候,需要指名 mysql 的版本,如果不指明则会自动下载最新的mysql版本
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.11
nacos
docker search nacos
docker pull nacos/nacos-server
nacos2.0的时候,需要开启 8848 和 9848 两个端口,百度了一下也没有具体的说明文章
方式一:
使用外置的数据库
https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
nacos 初始化数据库
查看网卡信息
ifconfig ent0
docker run -itd --name nacosStandAloneMysql -p 8848:8848 -p 9848:9848 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.44.119 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e TIME_ZONE='Asia/Shanghai' \
nacos/nacos-server
方式二:
使用内置数据库
不需要使用mysql数据库
docker run -itd --name nacosStandAlone -p 8848:8848 -p 9848:9848 \
-e MODE=standalone \
nacos/nacos-server
验证
http://localhost:8848/nacos/
rocketmq
docker search rocketmq
查看xxxxxxxxx镜像的版本信息
curl https://registry.hub.docker.com/v1/repositories/XXXXXXXXXXXX/tags | tr -d '[\[\]" ]' | tr '}' '\n' | awk -F: -v image='XXXXXXXXXXXX' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
docker pull rocketmqinc/rocketmq:4.4.0
nameServer
启动 rockermq nameServer 设置内存大小为 64M
docker run -itd --name rocketmqnamesrv -p 9876:9876 -e MAX_POSSIBLE_HEAP=100000000 -m 64m rocketmqinc/rocketmq:4.4.0 sh mqnamesrv
broker
创建rocketmq broker 的配置文件
mkdir -p /Users/yang/opt/rocketmq/conf
echo "brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#宿主机ip地址
brokerIP1 = 192.168.0.102" > /Users/yang/opt/rocketmq/conf/broker.conf
创建rocketmq broker 容器,容器占用的最大内存为128M
docker run -itd --name rocketmqbroker -p 10911:10911 -p 10909:10909 --link rocketmqnamesrv:namesrv \
-v /Users/yang/opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf \
-e NAMESRV_ADDR=namesrv:9876 \
-e MAX_POSSIBLE_HEAP=100000000 \
-e autoCreateTopicEnable=true \
-e autoCreateSubscriptionGroup=true \
-e defaultTopicQueueNums=4 \
-m 128m \
rocketmqinc/rocketmq:4.4.0 \
sh mqbroker \
-c ../conf/broker.conf
console
docker pull styletang/rocketmq-console-ng
创建容器,容器占用的最大内存为 256M
docker run -itd --name rocketmq-console -p 8080:8080 \
-e JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.102:9876 \
-e -Dcom.rocketmq.sendMessageWithVIPChannel=false \
-e MAX_POSSIBLE_HEAP=100000000 \
-m 256m \
styletang/rocketmq-console-ng
注意
上面的步骤只需要改动宿主机的地址,宿主机配置文件的路径调整为自己的路径,其他的内容 尽量不要进行改动
测试
网页访问
http://localhost:8080/
最主要的是看,这个地址有没有变为配置文件中设置的 宿主机 的 ip 地址
pom依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
消费者
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class RocketConsumer {
public static void main(String[] args) throws Exception {
// 实例化消息生产者,指定组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumerTest");
// 指定Namesrv地址信息.
consumer.setNamesrvAddr("localhost:9876");
// 订阅Topic
consumer.subscribe("TopicTest", "*");
//负载均衡模式消费
consumer.setMessageModel(MessageModel.CLUSTERING);
// 注册回调函数,处理消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s Receive New Messages: %s %n",
Thread.currentThread().getName(), msgs.toString());
for (MessageExt msg : msgs) {
System.out.println(new String(msg.getBody(), StandardCharsets.UTF_8));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//启动消息者
consumer.start();
System.out.printf("Consumer Started.%n");
}
}
生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
public class AsyncProducer {
public static void main(String[] args) throws Exception {
// 实例化消息生产者Producer
DefaultMQProducer producer = new DefaultMQProducer("RocketmqProducerTest");
// 设置NameServer的地址
producer.setNamesrvAddr("localhost:9876");
// 启动Producer实例
producer.start();
producer.setRetryTimesWhenSendAsyncFailed(0);
for (int i = 0; i < 10; i++) {
final int index = i;
// 创建消息,并指定Topic,Tag和消息体
Message msg = new Message("TopicTest",
"Order",
"shangHai",
("Hello world " + i + " !!!!!!").getBytes(RemotingHelper.DEFAULT_CHARSET));
// SendCallback接收异步返回结果的回调
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("%-10d OK %s %n", index,
sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
}
// 如果不再发送消息,关闭Producer实例。
// producer.shutdown();
}
}
mongodb
docker search mongodb
docker pull mongo
docker run -itd --name mongo -p 27017:27017 mongo --auth
进入容器控制台
docker exec -it mongo mongo admin
创建登陆的用户,设置用户的权限,数据库为 admin ,用户 admin,密码 123456
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
验证添加的用户能否正常的登陆
db.auth('admin', '123456')