首页 > 未分类

 

不要好奇为啥我这博客名字从编码妙妙屋变成了编程小屋。

那是因为我现在正在更新备案,编码妙妙屋这名字不能用,可是我以前的备案就是编码妙妙屋通过的,2019年迷惑行为+1

 

国庆啥都没干,笔记本也没有带回家,就纯玩了7天。太怠惰了,让我心有愧疚。

不过除了国庆假期之外我还是有在好好提升自己的,慢慢的缓缓地,每天都进步一点点。

淘宝工程师写的那本《深入分析 java web 技术内幕》 已经看了一半了,这本书有丶厚,400+页。说收获了什么还说不准,感觉知识并没有那么多,没有我当时看effective java和深入分析jvm的那种感觉。

 

话说我也一直想换下主题,主要是感觉本博客有丶太花里胡哨了,各种控件、图片啥的。我用的是共享虚拟主机,三天两头超出资源限制,有点顶不住。再加上万恶的换页面时歌也会跟着重新加载,让我很难受。

就一直想换个 pjax+极简的那种,就可以在页面跳转时歌曲不会变化,找了很久很久找到一个,不过还不够满足我的需求,所以我在其上进行了二次开发(魔改)

现在也在龟速修改中,至于最后改好了换不换我还不知道,看着来吧,换的代价也挺大的,主要是代码高亮这方面。 龟速修改的主题-> https://github.com/skypyb/pure-sky

阅读全文

RPC : Remote Procudure Call
不同计算机之间的方法可以远程调用,这个就是RPC最重要的概念

但是由于程序是运行在不同的机器中的,两个机器之间并没有联系,要是想实现调用其他机器上的方法如同在调用本机的方法一样的效果 该如何做到?

我用了最基本的BIO来实现这个需求,要实现这种需求, 客户端和服务端两个角色是必要的。

 

客户端调用过程大概这样,注意 这个 HelloService 是一个接口,并且在client服务中没有实现, 具体的实现在另一个服务,这么说有点像Feign的感觉,不过Feign底层用的是HttpClient。

 

HelloService 很简单,就一个方法

 

服务端的启动:

 

我个人在本机上是完全实现了相对应的效果的,即Client服务调用了Server服务的方法(这俩服务不在一个项目里)

这里只贴了启动和调用的代码,具体实现看github: https://github.com/skypyb/framework_impl/tree/master/rpc

阅读全文

若想实现RabbitMQ的消息回调,需要在配置文件下的rabbit选项下添加一行设置:

 

然后在发送者发送消息之前,需要先自行绑定好一个回调方法。

下面是创建回调方法与绑定的全部代码:

 

这样就已经成功实现回调了。但是发送者发送消息使用的RabbitTemplate是Spring自动创建的,因为Spring默认的Bean是单例的,所以针对不同的确认方案需要配置不同的bean.

比如我上边的代码,用的是默认的,那么我在这设置一次后,其他使用默认RabbitTemplate的发送者发送消息都会触发这个回调。这个看业务场景具体设置吧。

 

关于确认,看到回调方法里边的那个ack参数了吗?这个参数是MQ发给你的确认,代表消息已经投递成功 , Broker 收到了,也代表消息已经被持久化。

接着MQ Consumer就可以消费这条消息了。

如果消费者发送了ack,RabbitMq将会把这条消息从待确认中删除。如果是nack并且指明不要重新入队列,那么该消息也会删除。但是如果是nack且指明了重新入队列那么这条消息将会进入队列,然后重新发送给消费者。被重新投递的消息消息头amqp_redelivered属性会被设置成true,客户端可以依靠这点来判断消息是否被确认,可以好好利用这一点,如果不做判定每次失败都无脑重新回队列有可能导致同一消息不停的被发送和拒绝。消费者在确认消息之前和RabbitMq失去了连接那么消息也会被重新投递。

 

关于消费端的手动确认,我也写了一份代码

 

如果不想手动确认,在配置文件里把 acknowledge-mode: manual 改为auto,SpringBoot就会帮你自动确认。这个的机制是如果方法成功执行完毕无事发生,那就ack,要是途中报错了,就nack。

我个人觉得还是手动确认比较好,比较可控。

如果要使用SpringBoot帮你处理消息重试机制的话可以直接在yml中配

 

关于发送消息的回调,和接收消息后的重试,这两个东西不要随便乱配。

如果不是必须保证消息的投靠特别稳定、数据不能出现一点丢失。那么完全可以不用配这几个东西。嘛,具体还是看业务啦。

阅读全文
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00