目录:
1.代码设计
2.实现商品项目
3.分布式锁
4.消息中间件
5.ActiveMQ应用
错误解决
错误1.
启动shop-goods-provider的时候报错
javax.jms.JMSException: Could not connect to broker URL: tcp://192.168.32.134:61616. Reason: java.net.ConnectException: Connection refused: connect
mq.local.com在浏览器中可以看到
解决方法:
重新创建并且启动容器activemq
root@docker-HP-285-Pro-G2-MT:/home/docker/tools/dokerfiles-master/env10.1# ./run.sh mq
env10_6_Mq01
env10_6_Mq01
993e2a0595e9005188c223155f56c36d2664ed1e85337b318663c634e583a94f
启动容器
.activemq start
3.分布式锁
分布式锁
- 系统中各个节点共享
- 单节点操作
常见分布式锁
- Memcached的add,cas命令
- Zookeeper
- Redis的setnx命令。
执行setnx命令后,当不存在对应key时,setnx返回1,表示设置成功。
执行setnx命令后,当存在对应key时,setnx方法返回0,标识设置失败。
redis锁命令,open console
RDM Redis Console
Connecting...
已连接。
192.168.32.134:0>set name zhangsan
"OK"
192.168.32.134:0>get name
"zhangsan"
192.168.32.134:0>set name lisi
"OK"
192.168.32.134:0>get name
"lisi"
192.168.32.134:0>setnx sex man
"1"
192.168.32.134:0>get sex
"man"
192.168.32.134:0>setnx sex woman
"0"
192.168.32.134:0>get sex
"man"
192.168.32.134:0>
实现方案
- 每一种商品规定一个key值
- 线程操作之前setnx该key值
- 设置成功进行操作
- 操作完成删除key值
- 设置失败继续等待。
删除key值有两种实现方法:
- 设置超时时间,单位是秒。expire sex 10
192.168.32.134:0>get sex
"man"
192.168.32.134:0>expire sex 10
"1"
192.168.32.134:0>get sex
"man"
192.168.32.134:0>get sex
null
192.168.32.134:0>setnx sex woman
"1"
192.168.32.134:0>get sex
"woman"
- 删除key
192.168.32.134:0>del sex
"1"
192.168.32.134:0>get sex
null
4.消息中间件
分布式锁解决了高并发下的一致性问题,
java.net.SocketTimeoutException:Re