<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[业精于勤，荒于嬉；行成于思，毁于随。]]></title><description><![CDATA[知其然也要知其所以然]]></description><link>https://blog.youkuaiyun.com/YAOQINGGG</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; YAOQINGGG]]></copyright><item><title><![CDATA[调试rocketmq源码]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/93422820</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/93422820</guid><author>YAOQINGGG</author><pubDate>Sun, 23 Jun 2019 23:59:59 +0800</pubDate><description><![CDATA[1.从github下载rocketmq源码
2.添加环境变量
name为：ROCKETMQ_HOME
value为：rocketmq源码的路径
3.从RocketMQ distribution部署目录中将broker.conf、logback_broker.xml文件复制到conf目录中，logback_namesrv.xml文件则只需修改日志文件的目录
4.新建启动namesrv和broker
...]]></description><category></category></item><item><title><![CDATA[dubbo服务端客户端长连接心跳]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91649589</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91649589</guid><author>YAOQINGGG</author><pubDate>Wed, 12 Jun 2019 23:00:30 +0800</pubDate><description><![CDATA[当客户端从注册中心拿到服务端的ip地址之后，客户端与服务端之间建立连接，那这条建立的连接如何去校验状态呢。

]]></description><category></category></item><item><title><![CDATA[dubbo服务端限流]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91490414</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91490414</guid><author>YAOQINGGG</author><pubDate>Wed, 12 Jun 2019 10:04:45 +0800</pubDate><description><![CDATA[在服务端调用链条里，会有一个TpsLimitFilter类，用来对服务端限流
public boolean isAllowable(URL url, Invocation invocation) {
        int rate = url.getParameter(Constants.TPS_LIMIT_RATE_KEY, -1);
        long interval = url.g...]]></description><category></category></item><item><title><![CDATA[dubbo负载均衡策略]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91355627</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91355627</guid><author>YAOQINGGG</author><pubDate>Sun, 09 Jun 2019 18:35:09 +0800</pubDate><description><![CDATA[客户端调用服务端时，如何选择调用服务端的哪台机器上的服务呢。这就设计到负载均衡策略了。

默认使用的是RoundRobinLoadBalance,轮训策略，或者说是加权轮训策略
除此之外，还有随机策略，加权随机策略
最不活跃策略
以及一致性hash策略
还有在DubboInvoker里面我们可以看到，我们与服务端的某台机器建立的是多个连接（默认是两个），那么需要从连接里面选一个出来。
    @O...]]></description><category></category></item><item><title><![CDATA[dubbo客户端调用失败]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91355495</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91355495</guid><author>YAOQINGGG</author><pubDate>Sun, 09 Jun 2019 18:20:45 +0800</pubDate><description><![CDATA[当我们使用dubbo的时候，如果客户端调用服务端失败，客户端应该如何处理呢
客户端默认的如下，失败转移

1.失败转移，当出现失败，重试其它服务器，通常用于读操作，但重试会带来更长延迟。
public class FailoverClusterInvoker&lt;T&gt; extends AbstractClusterInvoker&lt;T&gt; {

    private static...]]></description><category></category></item><item><title><![CDATA[dubbo线程模型]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91352965</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91352965</guid><author>YAOQINGGG</author><pubDate>Sun, 09 Jun 2019 14:46:33 +0800</pubDate><description><![CDATA[一下都是讲的基于netty的通讯模式
先说客户端
找到NettyClient类doOpen方法
    @Override
    protected void doOpen() throws Throwable {
        NettyHelper.setNettyLoggerFactory();
        bootstrap = new ClientBootstrap(channe...]]></description><category></category></item><item><title><![CDATA[activemq支持事务]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91347093</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/91347093</guid><author>YAOQINGGG</author><pubDate>Sat, 08 Jun 2019 19:43:22 +0800</pubDate><description><![CDATA[activemq支持两种事务，本地事务，和分布式事务
public class TestProducer {
    public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
      ...]]></description><category></category></item><item><title><![CDATA[activemq发送方速率控制]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/90739930</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/90739930</guid><author>YAOQINGGG</author><pubDate>Sun, 02 Jun 2019 15:52:47 +0800</pubDate><description><![CDATA[queue里面send方法
    @Override
    public void send(final ProducerBrokerExchange producerExchange, final Message message) throws Exception {
        final ConnectionContext context = producerExchange.get...]]></description><category></category></item><item><title><![CDATA[activemq消费端确认机制]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/90614310</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/90614310</guid><author>YAOQINGGG</author><pubDate>Mon, 27 May 2019 23:47:39 +0800</pubDate><description><![CDATA[// 如果是同步receive方式，下面该方法是消息确认的逻辑
private void afterMessageIsConsumed(MessageDispatch md, boolean messageExpired) throws JMSException {
        if (unconsumedMessages.isClosed()) {
            return;
 ...]]></description><category></category></item><item><title><![CDATA[dubbo-代理类的生成过程]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/83450932</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/83450932</guid><author>YAOQINGGG</author><pubDate>Sat, 27 Oct 2018 23:13:07 +0800</pubDate><description><![CDATA[
首先看proxyFactory的生成过程
    private static final ProxyFactory proxyFactory = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();


ExtensionLoader初始化类
    @SuppressWarnings(&amp;amp;amp;quot;u...]]></description><category></category></item><item><title><![CDATA[dubbo服务启动过程]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/83446905</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/83446905</guid><author>YAOQINGGG</author><pubDate>Sat, 27 Oct 2018 15:50:42 +0800</pubDate><description><![CDATA[public class Main {

    public static final String CONTAINER_KEY = &quot;dubbo.container&quot;;

    public static final String SHUTDOWN_HOOK_KEY = &quot;dubbo.shutdown.hook&quot;;
    
    private static final Logger l...]]></description><category></category></item><item><title><![CDATA[activemq保证消息顺序原理]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/82563304</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/82563304</guid><author>YAOQINGGG</author><pubDate>Sun, 09 Sep 2018 22:26:23 +0800</pubDate><description><![CDATA[有时候我们需要消费者消费消息是顺序消费的。比如生成一个订单，先扣库存，然后扣款，这两条消息，由于现在系统都是分布式的，我们可能需要在有多台机器的多个消费者时，这两条消息是顺序消费的。在activemq中，有两种方式来保证，消息消费的顺序性。 
1）通过高级特性consumer独有消费者（exclusive consumer）



queue = new ActiveMQQueue(&amp;quot;TEST.Q...]]></description><category></category></item><item><title><![CDATA[activemq消费者消息预取和消息消费确认]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80106679</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80106679</guid><author>YAOQINGGG</author><pubDate>Fri, 27 Apr 2018 13:20:42 +0800</pubDate><description><![CDATA[消费者可以通过设置prefetchSize进行批量取消息，有默认值。可以设置： 
1、  tcp://localhost:61616?jms.prefetchPolicy.all=50

2、  tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1

3、  queue = new ActiveMQQueue(“TEST.QUEUE?co...]]></description><category></category></item><item><title><![CDATA[activemq消息的持久化]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80101880</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80101880</guid><author>YAOQINGGG</author><pubDate>Thu, 26 Apr 2018 23:49:27 +0800</pubDate><description><![CDATA[/**
 * Created by brady on 17/4/8.
 */
public class TestProducer {
    public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFac...]]></description><category></category></item><item><title><![CDATA[mysql之排序]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80070688</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80070688</guid><author>YAOQINGGG</author><pubDate>Tue, 24 Apr 2018 21:06:17 +0800</pubDate><description><![CDATA[关于explain中的extra是下面的值的含义


Using filesort


当Query 中包含 ORDER BY 操作，而且无法利用索引完成排序操作的时候，MySQL Query Optimizer 不得不选择相应的排序算法来实现。数据较少时从内存排序，否则从磁盘排序。Explain不会显示的告诉客户端用哪种排序。官方解释：“MySQL需要额外的一次传递，以找出如何按排序顺序检索行。...]]></description><category></category></item><item><title><![CDATA[netty概览]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80014989</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80014989</guid><author>YAOQINGGG</author><pubDate>Sun, 22 Apr 2018 00:03:59 +0800</pubDate><description><![CDATA[上图是从网上找的 
]]></description><category></category></item><item><title><![CDATA[activemq的broker对于queue的处理过程]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80034763</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/80034763</guid><author>YAOQINGGG</author><pubDate>Sat, 21 Apr 2018 23:05:19 +0800</pubDate><description><![CDATA[先写一下生产者和消费者的代码

生成者代码



/**
 * Created by brady on 17/4/8.
 */
public class TestProducer {
    public static void main(String[] args) throws Exception {
        ConnectionFactory connectionFactory = ...]]></description><category></category></item><item><title><![CDATA[并发问题总结]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79971204</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79971204</guid><author>YAOQINGGG</author><pubDate>Tue, 17 Apr 2018 10:35:24 +0800</pubDate><description><![CDATA[1.FutureTask原理



public class FutureTask&amp;lt;V&amp;gt; implements RunnableFuture&amp;lt;V&amp;gt;



public interface RunnableFuture&amp;lt;V&amp;gt; extends Runnable, Future&amp;lt;V&amp;gt; {

可以看到继承类

内部是通过一个AQS对象控制的



priva...]]></description><category></category></item><item><title><![CDATA[activemq broker topic消息收发处理过程]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79912913</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79912913</guid><author>YAOQINGGG</author><pubDate>Mon, 16 Apr 2018 00:46:46 +0800</pubDate><description><![CDATA[首先看一下activemq的网络模型（获取自网络）。 
 
可以看到，TcpTransportServer是一个监听网络的类，如果有socket连接，便会放入阻塞队列，然后创建一个TransportConnection类，该类接收socket的消息，进行逻辑处理；

先看看TransportConnector在干啥 
 
第一步：设置server处理类 
第二步：接收到连接socket加入线程池 ...]]></description><category></category></item><item><title><![CDATA[activemq发送同步发送和异步发送]]></title><link>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79833378</link><guid>https://blog.youkuaiyun.com/YAOQINGGG/article/details/79833378</guid><author>YAOQINGGG</author><pubDate>Fri, 06 Apr 2018 14:31:13 +0800</pubDate><description><![CDATA[在默认大多数情况下，AcitveMQ 是以异步模式发送消息。例外的情况：在没有使用 
事务的情况下，生产者以PERSISTENT 传送模式发送消息。在这种情况下，send 方法都 
是同步的，并且一直阻塞直到ActiveMQ 发回确认消息：消息已经存储在持久性数据存 
储中。这种确认机制保证消息不会丢失，但会造成生产者阻塞从而影响反应时间。 
高性能的程序一般都能容忍在故障情况下丢失少量数据。如果...]]></description><category></category></item></channel></rss>