狠狠撸

狠狠撸Share a Scribd company logo
Spring AMQP × RabbitMQ
        @Keisuke69
自己紹介
西谷圭介

  TIS株式会社

  eXcaleというPaaSやってます
  http://www.excale.net/
Twitter ID : @Keisuke69
Github : Keisuke69
Spring AMQPとは?
Springのサブプロジェクトの1つ

Java版と.Net版がある

比較的若いプロダクト

  最初のGAリリースが2011/08

  最新は1.1.3

AMQPベースのメッセージングをSpringっぽく扱える

  アプリケーションロジックとインフラ周りの設定を切り離せる

メッセージ送受信用に抽象化されたtemplateを提供

POJOによるメッセージ送受信をサポート
AMQP
メッセージングミドルウェアのオープンなプロトコル仕様

プラットフォーム問わず、実装言語非依存

インターオペラビリティ高い

APIだけでなくワイヤレベルプロトコルである

    JMSはAPIだけ

ビジネス上のリアルな問題を解決するようデザインされてい
る

http://www.amqp.org/
基本モデル
                                                 Server



   Publisher                    Exchange

                                       Binding



  Consumer                    Message Queue

                                       Virtual Host

Exchangeがメッセージを受け取ってMessage Queueへと受け渡す

Message QueueはMessageをためてConsumerに渡す

ExchangeとMessageQueueを対応付けるのがBinding

  ExchangeのタイプはDirect、Fanout、Topic、Headerがある

  MessageQueueを複数にする構成も可能
RabbitMQ
Erlangで書かれているブローカー

 VMwareによって開発されている

AMQPのインプリメンテーション

クラスタリングやキューのミラーリングが可能

 本来AMQPのSpecではクラスタ等については
 定义されていない
なぜメッセージングか


コンポーネントを疎結合にできる

非同期

負荷分散とスケーラビリティ
Spring AMQPを使う
Java-based container
    con?guration
 従来、XMLで定義していたSpringの各種設定をJavaクラス
 で定義

   冗長になりがちなXMLを書かなくていいので個人的に
   はおすすめ

 @Con?gurationをつけたクラスに、@Beanをつけたメ
 ソッドを実装してbean登録

 ApplicationContextはAnnotationCon?gApplicationContextで

 今回のサンプルは全てこの方式で設定
ConnectionFactory
RabbitMQへの接続を管理するインター
フェース

com.rabbitmq.client.Connectionのラッ
パー

CachingConnectionFactoryだけが実装ク
ラスとして提供されている
Template
AmqpTemplate
  汎用インターフェース

RabbitOperation
  RabbitMQ用インターフェース

RabbitTemplate
  実際のインプリメンテーション

実情として現時点ではサポートしているのがRabbitMQのみ

  後々、他のAMQPミドルウェアをサポート予定(らしい)
Template
  各種メソッドおよびコールバックを提供

  メッセージの送受信は基本的にTemplateを利用して行
  う
void send(Message message) throws AmqpException;

void convertAndSend(Object message) throws AmqpException;

Message receive() throws AmqpException;

Object receiveAndConvert() throws AmqpException;
MessageConverter
Spring AMQPの大きな特徴

オブジェクトとメッセージ間で変換が行
える

デフォルトではSimpleMessageConverter

 JsonMessageConverter
 MarshallingMessageConverter
Con?guration
@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");
	    }
}
メッセージの送信
        AmqpTemplateを使って行う

        下記サンプルではアノテーションベースの設定を行なっ
        ているのでAnnotationCon?tgApplicationContextを使用

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.");
? ? }
}
メッセージの受信
       送信と同じく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);
? ? }
}
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;
	  }
	
(省略)
}
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;
? ? }
}
コンバータを使った送信
       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.");
? ? }
}
コンバータを使った受信
                同期処理

                AmqpTemplate.receiveAndConvert()
                変換先の型にキャストする必要がある

public class Consumer {
    public static void main(String[] args){
        ApplicationContext context = new AnnotationConfigApplicationContext(SampleConfig.class);
        AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);
        SimplePojo simplePojo = (SimplePojo)amqpTemplate.receiveAndConvert();
        System.out.println("Receive message: key = " + simplePojo.getKey() + ", message = " + simplePojo.getMessage());
    }
}
MessageListener
MessageListener

非同期受信のためのインターフェース

  メッセージドリブンなコールバック処理を簡
  単に実装できる

SimpleMessageListenerContainer
  Springが提供する軽量リスナーコンテナ

メッセージ受信時の処理をハンドラとして実装
MessageListener
               HelloWorldHandlerというハンドラクラスをMessageListenerAdapterで紐付け

               もちろん、MessageConverterも利用可能


@Configuration
public class SampleListenerConfig {
? ? String queueName = "sample_queue";
? ?
? ? @Bean
? ? public ConnectionFactory connectionFactory() {
? ? ? ? CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
? ? ? ? connectionFactory.setUsername("guest");
? ? ? ? connectionFactory.setPassword("guest");
? ? ? ? return connectionFactory;
? ? }
? ? @Bean
? ? public SimpleMessageListenerContainer listenerContainer(){
? ? ? ? SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
? ? ? ? container.setConnectionFactory(connectionFactory());
? ? ? ? container.setQueueNames(queueName);
? ? ? ? container.setMessageListener(new MessageListenerAdapter(new HelloWorldHandler(),new JsonMessageConverter()));
? ? ? ? return container;
? ? }
}
ハンドラクラス
        特別なクラスの継承やインターフェースの実装は不要

        handleMessageというメソッドはデフォルト

          変更可能

        メソッドの引数として変換先の型を指定する

          自動的に変換されて、getterでアクセス可能

public class HelloWorldHandler {
? ? public void handleMessage(SimplePojo simplePojo) {
? ? ? ? System.out.println("Received: Key = " + simplePojo.getKey()
???????????????? + ", message = " + simplePojo.getMessage());
? ? }
}
惭别蝉蝉补驳别尝颈蝉迟别苍别谤の起动
        基本的に変わらない

        標準ではApplicationContext起動時に自動でリスナーも
        起動される

        受信時の処理がハンドラで行われるようになっている
        ためその辺りの記述が不要

public class Consumer {
? ? public static void main(String[] args){
? ? ? ? new AnnotationConfigApplicationContext(SampleListenerConfig.class);
? ? }
}
困ったところ
メッセージの型が固定になる

 ヘッダの値を元に変換先の型が特定されている(FQCN)

 PublisherがSpring以外でもこのヘッダのセットが必要

 我々の場合、MQにメッセージを送る側が異なる言語で実装されていた

 独自のクラスマッパーを用意

   とは言ってもFQCNでの指定を不要にしただけ

1つの型につき、定義できる処理が1つ

 複数のキュー、型を利用したい場合に大量に定義が必要、かつ1つの型で複数の処理
 は定義できない

   同じ型で異なる処理をさせたかった

 汎用ハンドラクラスを用意し、型と命名規則で実際のハンドラクラスへ処理を実装
サンプル
 (独自ClassMapper)
DefaultClassMapperを継承してtoClassメ
ソッドをオーバーライド

メッセージヘッダの"__TypeId__"に指定
された型名(FQCNじゃない)を使って
指定のパッケージ配下からクラスを探
しだして返却
サンプル
           (独自ClassMapper)
	   @Override
	   public Class<?> toClass(MessageProperties properties) {
	   	   if (targetClass != null) {
	   	   	    return targetClass;
	   	   }

	   	   Map<String, Object> headers = properties.getHeaders();
	   	   Object classIdFieldNameValue = headers.get(getClassIdFieldName());
	   	   String classId = null;
	   	   if (classIdFieldNameValue != null) {
	   	   	   classId = classIdFieldNameValue.toString();
	   	   }
	   	   String className = null;
	   	   try {
	   	   	   className = ClassResolver.scan(classId, this.basePackage);
	   	   	   if (className != null) {
	   	   	   	    return ClassUtils.forName(className, getClass()
	   	   	   	    	   	    .getClassLoader());
	   	   	   }
	   	   } catch (IOException e1) {

	   	   } catch (ClassNotFoundException e) {

	   	   }
	   	   return super.toClass(properties);
	   }
サンプル
(汎用ハンドラクラス)
メッセージヘッダのTypeId+Handlerという名前で委
譲先のハンドラクラスを決定

“__Method__”ヘッダにセットされたメソッドを実行

全オブジェクト分のSimpleListenerContainerのbean登
録が不要に

1つのキューで複数のオブジェクトを元にしたメッ
セージの送受信が可能
サンプル
                            (汎用ハンドラクラス)
public class GenericHandler {

	    private String path;

	    @Autowired
	    BeanFactory beanFactory;

	    public GenericHandler() {
	    	    this.path = "org.hoge";
	    }

	    public GenericHandler(String path) {
	    	    this.path = path;
	    }

	    public void handleMessage(Object obj, MessageProperties message) {
	    	    String typeId = null;
	    	    String methodName = null;
	    	    try {
	    	    	     Map<String, Object> headers = message.getHeaders();
	    	    	     typeId = (String) headers.get("__TypeId__");
	    	    	     methodName = ((String) headers.get("__Method__"));
	    	    	     methodName = StringUtils.uncapitalize(methodName);

	    	    	     String delegateClassName = ClassResolver.scan(typeId + "Handler",this.path);
	    	    	     Object delegate = beanFactory.getBean(ClassUtils.forName(delegateClassName, getClass().getClassLoader()));

	    	    	    MethodInvoker methodInvoker = new MethodInvoker();
	    	    	    methodInvoker.setTargetObject(delegate);
	    	    	    methodInvoker.setTargetMethod(methodName);
	    	    	    Object[] objects = { obj };
	    	    	    methodInvoker.setArguments(objects);
	    	    	    methodInvoker.prepare();
	    	    	    methodInvoker.invoke();
	    	    } catch (Exception e) {
	    	    	    throw new HandlerExecutionFailureException(e);
	    	    }
	    }
}
その他の考慮事項
RabbitMQを冗長化した場合の話

 特にMirroredQueueを利用する場合
 →Codezineさんに寄稿した記事に書いておきました
 ?http://codezine.jp/article/detail/6943

エラー時のハンドリング

 RetryTemplateとMessageRecovererとか

トランザクション

 @TransactionalとTransactionManager
なぜメッセージングか
コンポーネントを疎結合にできる

 MQを境界としてコンポーネント間の依存関係を切り離せる

 メッセージのフォーマットさえ正しければ言語が異なってもOK

非同期

 疎結合になるため、障害時などの影響を小さくできる

 部分的なスケールアウトなどが可能に

負荷分散とスケーラビリティ

 Consumerプロセスを増やすだけでスケールできる

      SpringMQを使えば1プロセス内の並行度の設定も可能

 Queueを増やすことも簡単、Exchangeの構成だけでラウンドロビン等も可能
Spring AMQPとRabbitMQ使うと

 簡単に非同期アプリが書けますよ!

      http://www.excale.net/

More Related Content

What's hot (20)

20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
?
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
chonaso
?
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
?
础奥厂のログ管理ベストプラクティス
础奥厂のログ管理ベストプラクティス础奥厂のログ管理ベストプラクティス
础奥厂のログ管理ベストプラクティス
Akihiro Kuwano
?
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
?
vSphere 7 へのアップグレードについて
vSphere 7 へのアップグレードについてvSphere 7 へのアップグレードについて
vSphere 7 へのアップグレードについて
富士通クラウドテクノロジーズ株式会社
?
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか? [SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
de:code 2017
?
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
?
贵濒耻别苍迟诲のお勧めシステム构成パターン
贵濒耻别苍迟诲のお勧めシステム构成パターン贵濒耻别苍迟诲のお勧めシステム构成パターン
贵濒耻别苍迟诲のお勧めシステム构成パターン
Kentaro Yoshida
?
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
ShuheiUda
?
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
?
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
imurata8203
?
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
?
厂飞补驳驳别谤て?の补辫颈开発よもやま话
厂飞补驳驳别谤て?の补辫颈开発よもやま话厂飞补驳驳别谤て?の补辫颈开発よもやま话
厂飞补驳驳别谤て?の补辫颈开発よもやま话
KEISUKE KONISHI
?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Suguru Ito
?
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす 谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
Akihiro Suda
?
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
?
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
株式会社クライム
?
君は测补谤苍.濒辞肠办をコミットしているか?
君は测补谤苍.濒辞肠办をコミットしているか?君は测补谤苍.濒辞肠办をコミットしているか?
君は测补谤苍.濒辞肠办をコミットしているか?
Teppei Sato
?
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
20190828 AWS Black Belt Online Seminar Amazon Aurora with PostgreSQL Compatib...
Amazon Web Services Japan
?
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
chonaso
?
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
?
础奥厂のログ管理ベストプラクティス
础奥厂のログ管理ベストプラクティス础奥厂のログ管理ベストプラクティス
础奥厂のログ管理ベストプラクティス
Akihiro Kuwano
?
Always on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイントAlways on 可用性グループ 構築時のポイント
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
?
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawawsOAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか? [SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
[SC03] Active Directory の DR 対策~天災/人災/サイバー攻撃、その時あなたの IT 基盤は利用継続できますか?
de:code 2017
?
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
?
贵濒耻别苍迟诲のお勧めシステム构成パターン
贵濒耻别苍迟诲のお勧めシステム构成パターン贵濒耻别苍迟诲のお勧めシステム构成パターン
贵濒耻别苍迟诲のお勧めシステム构成パターン
Kentaro Yoshida
?
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
ShuheiUda
?
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
toshi_pp
?
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
碍耻产别谤苍别迟别蝉バックアップツール痴别濒别谤辞とちょっとした苦労话
imurata8203
?
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
?
厂飞补驳驳别谤て?の补辫颈开発よもやま话
厂飞补驳驳别谤て?の补辫颈开発よもやま话厂飞补驳驳别谤て?の补辫颈开発よもやま话
厂飞补驳驳别谤て?の补辫颈开発よもやま话
KEISUKE KONISHI
?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Azure Database for MySQL PostgreSQLを使って運用の手間を省きませんか?
Suguru Ito
?
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす 谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
谤辞辞迟権限无しで碍耻产别谤苍别迟别蝉を动かす
Akihiro Suda
?
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
?
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
【痴别别补尘基础】简単解説!バックアップ可能な环境や机能をご绍介
株式会社クライム
?
君は测补谤苍.濒辞肠办をコミットしているか?
君は测补谤苍.濒辞肠办をコミットしているか?君は测补谤苍.濒辞肠办をコミットしているか?
君は测补谤苍.濒辞肠办をコミットしているか?
Teppei Sato
?

Similar to Spring AMQP × RabbitMQ (20)

JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Norito Agetsuma
?
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
?
第2回デザインパターン资料
第2回デザインパターン资料第2回デザインパターン资料
第2回デザインパターン资料
gaaupp
?
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
?
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
?
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
Tomoyuki Obi
?
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
?
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
?
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
stomita
?
Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要
kuroiwa
?
Rakuten tech conf
Rakuten tech confRakuten tech conf
Rakuten tech conf
Koichi Fujikawa
?
厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
ssuser65180a
?
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
Yoshifumi Kawai
?
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
?
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
Norito Agetsuma
?
使ってみよう PowerShell
使ってみよう PowerShell使ってみよう PowerShell
使ってみよう PowerShell
Kazuki Takai
?
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Norito Agetsuma
?
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
?
第2回デザインパターン资料
第2回デザインパターン资料第2回デザインパターン资料
第2回デザインパターン资料
gaaupp
?
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
?
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
?
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
?
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
?
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
础辫别虫コアデベロッパーセミナー(础辫别虫コード)071010
stomita
?
Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要
kuroiwa
?
厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略厂别补蝉补谤プロジェクト彻底攻略
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
Yoshifumi Kawai
?
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
?
使ってみよう PowerShell
使ってみよう PowerShell使ってみよう PowerShell
使ってみよう PowerShell
Kazuki Takai
?

More from Keisuke Nishitani (20)

Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
Keisuke Nishitani
?
Serverless Anti-Patterns
Serverless Anti-PatternsServerless Anti-Patterns
Serverless Anti-Patterns
Keisuke Nishitani
?
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani
?
Tune Up AWS Lambda
Tune Up AWS LambdaTune Up AWS Lambda
Tune Up AWS Lambda
Keisuke Nishitani
?
What's new with Serverless
What's new with ServerlessWhat's new with Serverless
What's new with Serverless
Keisuke Nishitani
?
Introduction to AWS X-Ray
Introduction to AWS X-RayIntroduction to AWS X-Ray
Introduction to AWS X-Ray
Keisuke Nishitani
?
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexIntroducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Keisuke Nishitani
?
What's new with Serverless
What's new with ServerlessWhat's new with Serverless
What's new with Serverless
Keisuke Nishitani
?
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessRunning Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
?
Serverless Revolution
Serverless RevolutionServerless Revolution
Serverless Revolution
Keisuke Nishitani
?
础奥厂のサーバレス関连アップデートを10分で绍介します
础奥厂のサーバレス関连アップデートを10分で绍介します础奥厂のサーバレス関连アップデートを10分で绍介します
础奥厂のサーバレス関连アップデートを10分で绍介します
Keisuke Nishitani
?
Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)
Keisuke Nishitani
?
Going Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No ServersGoing Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No Servers
Keisuke Nishitani
?
クラウド时代のソフトウェアアーキテクチャ
クラウド时代のソフトウェアアーキテクチャクラウド时代のソフトウェアアーキテクチャ
クラウド时代のソフトウェアアーキテクチャ
Keisuke Nishitani
?
AWS Lambda Updates
AWS Lambda UpdatesAWS Lambda Updates
AWS Lambda Updates
Keisuke Nishitani
?
Building Scalable Application on the Cloud
Building Scalable Application on the CloudBuilding Scalable Application on the Cloud
Building Scalable Application on the Cloud
Keisuke Nishitani
?
AWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep DiveAWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep Dive
Keisuke Nishitani
?
础苍诲谤辞颈诲を中心に纽解く滨辞罢
础苍诲谤辞颈诲を中心に纽解く滨辞罢础苍诲谤辞颈诲を中心に纽解く滨辞罢
础苍诲谤辞颈诲を中心に纽解く滨辞罢
Keisuke Nishitani
?
础奥厂で実现するクラウドネイティブなアプリ开発のポイント
础奥厂で実现するクラウドネイティブなアプリ开発のポイント础奥厂で実现するクラウドネイティブなアプリ开発のポイント
础奥厂で実现するクラウドネイティブなアプリ开発のポイント
Keisuke Nishitani
?
Scale Your Business without Servers
Scale Your Business without ServersScale Your Business without Servers
Scale Your Business without Servers
Keisuke Nishitani
?
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
Keisuke Nishitani
?
AWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべことAWSでアプリ開発するなら 知っておくべこと
AWSでアプリ開発するなら 知っておくべこと
Keisuke Nishitani
?
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon LexIntroducing Amazon Rekognition, Amazon Polly and Amazon Lex
Introducing Amazon Rekognition, Amazon Polly and Amazon Lex
Keisuke Nishitani
?
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or ServerlessRunning Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Running Java Apps with Amazon EC2, AWS Elastic Beanstalk or Serverless
Keisuke Nishitani
?
础奥厂のサーバレス関连アップデートを10分で绍介します
础奥厂のサーバレス関连アップデートを10分で绍介します础奥厂のサーバレス関连アップデートを10分で绍介します
础奥厂のサーバレス関连アップデートを10分で绍介します
Keisuke Nishitani
?
Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)
Keisuke Nishitani
?
Going Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No ServersGoing Serverless, Building Applications with No Servers
Going Serverless, Building Applications with No Servers
Keisuke Nishitani
?
クラウド时代のソフトウェアアーキテクチャ
クラウド时代のソフトウェアアーキテクチャクラウド时代のソフトウェアアーキテクチャ
クラウド时代のソフトウェアアーキテクチャ
Keisuke Nishitani
?
Building Scalable Application on the Cloud
Building Scalable Application on the CloudBuilding Scalable Application on the Cloud
Building Scalable Application on the Cloud
Keisuke Nishitani
?
AWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep DiveAWS Lambda / Amazon API Gateway Deep Dive
AWS Lambda / Amazon API Gateway Deep Dive
Keisuke Nishitani
?
础苍诲谤辞颈诲を中心に纽解く滨辞罢
础苍诲谤辞颈诲を中心に纽解く滨辞罢础苍诲谤辞颈诲を中心に纽解く滨辞罢
础苍诲谤辞颈诲を中心に纽解く滨辞罢
Keisuke Nishitani
?
础奥厂で実现するクラウドネイティブなアプリ开発のポイント
础奥厂で実现するクラウドネイティブなアプリ开発のポイント础奥厂で実现するクラウドネイティブなアプリ开発のポイント
础奥厂で実现するクラウドネイティブなアプリ开発のポイント
Keisuke Nishitani
?
Scale Your Business without Servers
Scale Your Business without ServersScale Your Business without Servers
Scale Your Business without Servers
Keisuke Nishitani
?

Recently uploaded (8)

Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
?
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ssuserfcafd1
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
Matsushita Laboratory
?
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
?
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ドメインモデリング基本编①词全体の流れ2025冲02冲27社内向け开催.辫辫迟虫
ssuserfcafd1
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
滨肠丑颈颈搁颈办颈蝉耻办别冲理学疗法士间の知识共有に向けた临床推论テキストの构造化に関する研究.辫诲蹿
Matsushita Laboratory
?

Spring AMQP × RabbitMQ