ZooKeeper注册中心
/** * ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、 * 分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于 * 诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。 */ public void tesG() throws Exception { ZooKeeper zooKeeper = ZKUtils.getZooKeeper(); for (int i = 0; i < 5; i ++) { String threadName = "LockThread-" + i; new Thread(() -> { ZKLockUtils lockUtils = new ZKLockUtils(); lockUtils.setZooKeeper(zooKeeper); lockUtils.setThreadName(threadName); lockUtils.lock(); System.out.println(Thread.currentThread().getName() + "making task"); //making task ... try { Thread.sleep(10); } catch (InterruptedException e) { log.error("e:", e); } finally { lockUtils.unlock(); } }, threadName).start(); } }
MySQL表锁了,强制释放锁
1、查看当前进程
mysql> show processlist;
2、查看当前运行的事务
mysql> SELECT * FROM information_schema.INNODB_TRX;
3、当前出现的锁
mysql> SELECT * FROM information_schema.INNODB_LOCKs;
4、kill掉对应进程
kill id
快速解决
遇到mysql执行sql后锁住的情况可以这样快速的解锁,生产环境慎用
一旦杀错线程会导致本来该执行的sql执行失败
select * from information_schema.INNODB_TRX;
kill trx_mysql_thread_id
生产者发送消息和消息者接受消息
基本消息队列的消息发送流程:
1、建立connection
2、创建channel
3、利用channel声明队列
4、利用channel向队列发送消息
基本消息队列的消息接收流程:
1、建立connection
2、创建channel
3、利用channel声明队列
4、定义consumer的消费行为handleDelivery()
5、利用channel将消费者与队列绑定
=============
我们写的时候不用那么复杂
比如rabbitmq
1、引入包
springamop包含了rabbitmq
spring-boot-starter-amqp
2、在publisher服务中编写application.yml,添加mq连接信息
spring:
rabbitmq:
host:
port:
virtual-host: #虚拟主机,在rabbitmq连接管理后台
username:
password:
3、应用到业务中 如下单成功需要发送消息
@Autowired
private RabbitTemplate rabbitTemplate;
@Test public void testSimpleQueue() { String queueName = “simple–>queue”; String message = “hello”; rabbitTemplate.convertAndSend(queueName, message); }