루비에서 NATS를 배우고 있으며 표준 입력란에서 간단한 "cat"을 만들고 싶습니다. 내가 모든 라인을 얻었고 루프가 종료되지 않거나 아무것도 보내지지 않습니다.루비 NATS 간행
!/usr/bin/env ruby
require "nats/client"
queue = ARGV.shift
NATS.start do
STDIN.each_line do |line|
puts "will send: #{line}"
NATS.publish(queue, line)
end
NATS.stop
end
puts "... #{__LINE__}"
exit 0
그리고 실행 : 그것은 정확하게 보낼 시도 할 것이다 각 라인을 보여주고, 프로그램이 종료하지만
NATS.stop이 활성화# cat cat.rb | ./cat.rb myqueue
, 아무것도, 큐에 최대 보여줍니다 :
# cat cat.rb | ./cat.rb myqueue
will send: #!/usr/bin/env ruby
will send:
will send: require "nats/client"
will send:
will send: queue = ARGV.shift
will send:
will send: NATS.start do
will send: STDIN.each_line do |line|
will send: puts "will send: #{line}"
will send: NATS.publish(queue, line)
will send: end
will send:
will send: NATS.stop
will send: end
will send:
will send: puts "... #{__LINE__}"
will send: exit 0
will send:
... 16
#
그리고 NATS.stop와
는 모든 라인이 큐에 전송, 주석,하지만 프로그램이 종료되지 않습니다 을# cat cat.rb | ./cat.rb myqueue
will send: #!/usr/bin/env ruby
will send:
will send: require "nats/client"
will send:
will send: queue = ARGV.shift
will send:
will send: NATS.start do
will send: STDIN.each_line do |line|
will send: puts "will send: #{line}"
will send: NATS.publish(queue, line)
will send: end
will send:
will send: # NATS.stop
will send: end
will send:
will send: puts "... #{__LINE__}"
will send: exit 0
will send:
<and program sits here>
무엇이 누락 되었습니까? Ruby에서 멀티 스레딩 문제를 포함하지 않는 메시지를 보내는 것이 더 쉽지 않을까요?
'NATS.stop'을 활성화 한 상태에서 프로그램 끝에서'sleep 60'을 입력하면 어떻게됩니까? 그러면 메시지가 전달됩니까? – Casper
실제로 모든 메시지의 처리를 보장하기 위해'stop'을 호출하기 전에'NATS.flush'를 호출해야한다고 생각합니다. – Casper