rabbitmq java 예제

Posted on

이 예제에서 생산자는 시퀀스 번호를 전달하는 많은 수의 메시지를 생성하고 소비자는 별도의 스레드에서 메시지를 사용합니다. 클래스 경로에 RabbitMQ 자바 클라이언트만으로 이 두 가지를 컴파일할 수 있습니다. 서비스 중 하나는 RabbitMQ에 메시지를 게시하고 다른 하나는 소비합니다. 토끼MQ는 AMQP 서버입니다. 서버는 https://www.rabbitmq.com/download.html 자유롭게 사용할 수 있습니다. 수동으로 다운로드할 수 있습니다., 또는 홈 브루와 맥을 사용 하는 경우: RabbitMQ Erlang에서 작성 하 고 대부분의 주요 언어에 사용할 수 있는 드라이버/클라이언트. 우리는이 게시물에 Java를 사용하고 있으므로 먼저 자바 클라이언트를 잡을 것입니다. 자바 클라이언트에 대한 maven 종속성은 아래에 있습니다. 서버에서 교환을 나열하려면 이제까지 유용한 rabbitmqctl을 실행할 수 있습니다 : 로그 메시지를 방출하는 생산자 프로그램은 이전 자습서와 크게 다르지 않습니다. 가장 중요한 변화는 이제 이름없는 대신 로그 교환에 메시지를 게시하려는 것입니다. 보낼 때 라우팅키를 제공해야 하지만 팬아웃 교환에서는 그 값이 무시됩니다. 여기에 EmitLog.java 프로그램에 대한 코드를 간다 : (토끼MQ 자바 클라이언트는 groupId com.rabbitmq 및 artifactId amqp-클라이언트와 함께, 중앙 메이븐 저장소에 있습니다.) 이를 실행하려면 rabbitmq-client.jar와 클래스 경로에 대한 종속성이 필요합니다.

터미널에서 소비자(수신기): rabbitmqctl list_bindings를 사용하여 코드가 실제로 바인딩 및 큐를 만드는지 확인할 수 있습니다. 두 개의 ReceiveLogs.java 프로그램을 실행하면 다음과 같이 표시됩니다: mapCall 변형은 좀 더 정교합니다: 일반 Java 값을 포함하는 java.util.map을 AMQP 0-9-1 바이너리 테이블 표현으로 인코딩하고 응답을 디코딩합니다. 같은 방법으로. (여기에서 사용할 수 있는 값 형식에 대한 몇 가지 제한 사항이 있습니다. 자세한 내용은 javadoc을 참조하십시오.) 일반적으로 미터레지스트리 인스턴스를 마이크로미터메트릭스컬렉터에 전달합니다. 다음은 JMX의 예입니다: 주소 배열을 newConnection()에 전달할 수 있습니다. 주소는 호스트 및 포트 구성 요소가 있는 com.rabbitmq.client 패키지의 편리한 클래스입니다. 실행기 및 실행기 서비스 클래스는 모두 java.util.concurrent 패키지에 있습니다. 이 시점에서 queueName에는 임의의 큐 이름이 포함됩니다. 예를 들어 amq.gen-JzTY20BRgKO-HjmUJj0wLg처럼 보일 수 있습니다. 이렇게 하면 배달 모드 2(영구), 우선 순위 1 및 콘텐츠 유형 “텍스트/일반”이 있는 메시지가 전송됩니다. Builder 클래스를 사용하여 필요한 만큼의 속성을 가진 메시지 속성 개체를 빌드합니다.

메시지 수신: 서버 푸시 배달(아래 섹션 참조)은 채널별 주문이 유지된다는 보장과 함께 동시에 전달됩니다. 디스패치 메커니즘은 java.util.concurrent.ExecutorService를 사용하며, 연결당 하나씩 사용합니다. 커넥션팩토리#setsharedExecutor 세터를 사용하여 단일 ConnectionFactory에서 생성된 모든 연결에서 공유되는 사용자 지정 실행기를 제공할 수 있습니다. 생산자 클래스는 큐에 메시지를 작성하는 일을 담당합니다. 우리는 아파치 커먼스 랭을 사용하여 직렬화 가능한 자바 객체를 바이트 배열로 변환하고 있습니다. 공용 랭에 대한 maven 종속성은 소비자 스레드(아래 수신 참조)는 기본적으로 새 실행기 Service 스레드 풀에 자동으로 할당됩니다. 더 큰 제어가 필요한 경우 newConnection() 메서드에 실행기 서비스를 제공하므로 이 스레드 풀이 대신 사용됩니다.