我遇到了一个问题,设置basic.qos为1没有达到预期的效果 - 大量消息仍然被推送给我的消费者。
我的代码看起来有点像这样:
Channel channel = getChannel("pollQueuePassive"); // from our own channel pool implementation
try{
channel.queueDeclarePassive(queue.name);
} catch (IOException e){
channel = getChannel("pollQueueActive");
channel.queueDeclare(queue.name, true, false, false, null);
}
channel.basicQos(1);
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(queue.name, autoAck, consumer);
while (!stopPolling()) {
try{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
boolean workResult = doWork(message);
if(!autoAck) {
if(workResult)
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), true);
else
channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true);
}
} catch (InterruptedException e) {}
}
closeConnection();
Run Code Online (Sandbox Code Playgroud)
一旦我开始以这种方式从队列中消费,队列中的所有消息(在某些情况下最多 20,000 条)几乎会立即传递给消费者。由于我想同时将队列中的消息分发给数十个消费者,这种行为显然是不可取的。我玩过移动我的 …
我的扩展已chrome.runtime.onMessage.addListener()在后台页面和内容脚本中定义。有些消息需要由后台页面捕获,其他消息需要由内容脚本捕获。我的问题是,由于某种原因,我的内容脚本之一无法捕获消息。
我的背景页面包含:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
if (msg["injectCss"]) {
chrome.runtime.sendMessage({ beginInject: msg.injectCss.files.length });
injectCss(sender.tab.id, msg.injectCss.files, 0, function () {
chrome.runtime.sendMessage({ endInject: true });
respond();
});
}
});
Run Code Online (Sandbox Code Playgroud)
我的内容脚本包含:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
if (msg["beginInject"]) {
//do something
respond();
}
});
Run Code Online (Sandbox Code Playgroud)
当chrome.runtime.sendMessage({ beginInject: msg.injectCss.files.length });从后台页面调用时,后台页面本身捕获消息而不是内容脚本。
问题:有没有办法将消息标记为“尚未处理”,以便其他侦听器有机会捕获并处理它?
我正在使用微服务,假设我有 3 个服务,它们都通过 JGroup UDP 通道相互连接(JGroups 可以在它们之间广播消息):
--- --- ---
| A | --msg--> | B || C |
--- --- ---
Run Code Online (Sandbox Code Playgroud)
如果我每个服务只有一个实例,那么一切都很好。但是,例如,如果我有两个 service 实例,C它们都会收到事件,并且它们都会运行自己的过程,结果将在数据库中复制(两次求和)。
--- --- --- ---
| A | --msg--> | B || C || C |
--- --- --- ---
Run Code Online (Sandbox Code Playgroud)
有没有办法管理这个?
过去两天我一直在研究 Apache Camel 和 Kafka,希望能了解消息传递框架/代理。Camel/Kafka 的一个可能用例是使用 Kafka 作为消息代理,同时使用 Camel 实现生产者和消费者吗?我看到了一个类似的简短示例,但似乎无法再次找到它。如果不是,Camel:Kafka 组件的意义何在?
根据我目前的理解,所有客户端连接都在两个级别进行身份验证,通道级别和队列管理器级别,
在队列管理器级别,它使用对象CONNAUTH的属性值来确定如何完成身份验证(例如:使用主机操作系统用户存储库),如果对象指定,则它使用结构中包含的用户 ID作为用户应用程序上下文的 id,它用于授权,或者如果存在,则运行客户端应用程序的用户 id 用作应用程序上下文的用户 id,并且该用户 id 用于授权。QMGRAUTHINFOAUTHINFOADOPTCTX(YES)MQCSPADOPTCTX(NO)
在渠道级别,不执行任何与授权相关的操作。仅按照配置进行身份验证。为了更精细的访问控制,一组通道验证记录被应用于通道。CONNAUTH属性的值QMGR仍用于确定要进行身份验证的用户存储库。
问题:
当我尝试在我的Rails 3项目中提交表单时出现以下错误.当1个用户使用Simple Private Messaging插件向另一个用户发送消息时,将使用该表单.
我现在设置网站的方式,用户无需注册或登录即可发送消息.
我得到的错误
NoMethodError in MessagesController#create
undefined method `find_by_login' for #<Class:0x12a374238>
app/controllers/messages_controller.rb:33:in `create'
Run Code Online (Sandbox Code Playgroud)
消息控制器
def new
@message = Message.new
if params[:reply_to]
@reply_to = @user.received_messages.find(params[:reply_to])
unless @reply_to.nil?
@message.to = @reply_to.sender.login
@message.subject = "Re: #{@reply_to.subject}"
@message.body = "\n\n*Original message*\n\n #{@reply_to.body}"
end
end
end
def create
@message = Message.new(params[:message])
@message.sender = @user
@message.recipient = User.find_by_login(params[:message][:to])
if @message.save
flash[:notice] = "Message sent"
redirect_to user_messages_path(@user)
else
render :action => :new
end
end
Run Code Online (Sandbox Code Playgroud)
消息>新视图(这是创建表单的位置)
<%= form_for @message, :url => messages_path(:user_id => @user) do …Run Code Online (Sandbox Code Playgroud) 现状:
我有两个python应用程序(前端服务器和数据收集器,数据库是'它们之间').
目前使用redis作为db及其发布/订阅协议,以在新数据可用时通知前端.
但是我可能想要使用不同的数据库(并且不希望仅为pub/sub保留系统上的redis).
如果数据收集器已将新数据传输到数据库(不使用像beanstalkd或redis这样的外部消息队列),是否有任何简单的替代方法可以通知我的前端?
在MQTT中,客户端可以订阅主题名称或主题通配符.可以使用相同的通配符将消息发布到主题或某些主题.但是如何将消息发布到彼此独立的某个主题?我需要修改MQTT协议吗?
例如:我的服务器处理来自10个客户端的连接(这些客户端彼此不相关)与ids:client1,client2,...,client 10和client1想要向任意数量的客户端发送消息(例如客户端3,客户端7,客户端8)
我无法理解使用 Celery 的优势是什么。我知道你可以将 Celery 与 Redis、RabbitMQ 等一起使用,但为什么我不直接获取这些消息队列服务的客户端,而不是将 Celery 放在它前面呢?
ETE2(用于系统发育树探索的Python环境)有一个.phonehome()可以在树/节点类对象上调用的方法.返回:
== Calling home... Got answer!
He11o alien,
How is everything in the Earth?
We miss you in Brodo Asogi.
I see you are in shape.
No updates are available.
== Do you want to leave any message?
(Press enter to finish)
Run Code Online (Sandbox Code Playgroud)
如果您想自己测试一下,请尝试:
from ete2 import Tree
t = Tree() # generate random Tree
t.phonehome() # communicate with Aliens!
Run Code Online (Sandbox Code Playgroud)
这是一个复活节彩蛋吗?
messaging ×12
python ×3
java ×2
rabbitmq ×2
amqp ×1
apache-camel ×1
apache-kafka ×1
broadcast ×1
celery ×1
etetoolkit ×1
forms ×1
ibm-mq ×1
javascript ×1
jgroups ×1
midi ×1
mqtt ×1
solace ×1