14. Configuration
@Configuration
public class SampleConfig {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin() {
return new RabbitAdmin(connectionFactory());
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setRoutingKey("sample_queue");
template.setQueue("sample_queue");
return template;
}
@Bean
public Queue helloWorldQueue() {
return new Queue("sample_queue");
}
}
15. メッセージの送信
AmqpTemplateを使って行う
下記サンプルではアノテーションベースの設定を行なっ
ているのでAnnotationConfitgApplicationContextを使用
public class Publisher {
public static void main(String[] args){
ApplicationContext context = new AnnotationConfigApplicationContext(SampleConfig.class);
AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);
amqpTemplate.convertAndSend("Hello world");
System.out.println("Sent message.");
}
}
16. メッセージの受信
送信と同じくAmqpTemplateを使う
public class Consumer {
public static void main(String[] args){
ApplicationContext context = new
AnnotationConfigApplicationContext(SampleConfig.class);
AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);
String message = (String)amqpTemplate.receiveAndConvert();
System.out.println("Receive: " + message);
}
}
17. MessageConverter
Templateのbean登録時に利用したいコンバータをセットする
今回は JsonMessageConverterを使用
JsonMessageConverterを利用する場合、Jacksonパーサ必須
@Configuration
public class SampleConfig {
(省略)
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setRoutingKey("sample_queue");
template.setQueue("sample_queue");
template.setMessageConverter(new JsonMessageConverter());
return template;
}
(省略)
}
18. MessageConverter
POJOを用意する
今回はシンプルにkeyとmessageというフィールドを用意してそれらに対するgetter/setter
を定義したものを用意
DB用のモデルクラスなどと兼用することも可能
public class SimplePojo {
private String key;
private String message;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
19. コンバータを使った送信
POJOをnewしたオブジェクトに値をセット
AmqpTemplateのconvertAndSendの引数としてオブジェクトを渡
す
public class Publisher {
public static void main(String[] args){
ApplicationContext context = new
AnnotationConfigApplicationContext(SampleConfig.class);
AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);
SimplePojo simplePojo = new SimplePojo();
simplePojo.setKey("ABC");
simplePojo.setMessage("This is message made by pojo.");
amqpTemplate.convertAndSend(simplePojo);
System.out.println("Sent message.");
}
}
25. MessageListenerの起動
基本的に変わらない
標準ではApplicationContext起動時に自動でリスナーも
起動される
受信時の処理がハンドラで行われるようになっている
ためその辺りの記述が不要
public class Consumer {
public static void main(String[] args){
new AnnotationConfigApplicationContext(SampleListenerConfig.class);
}
}