Spring 4 声明RabbitMQ并将其与Spring 4 WebSocket一起使用
在我们当前的应用程序中,我们通过以下方式使用Spring AMQP:Spring 4 声明RabbitMQ并将其与Spring 4 WebSocket一起使用,spring-4,spring-messaging,spring-websocket,Spring 4,Spring Messaging,Spring Websocket,在我们当前的应用程序中,我们通过以下方式使用Spring AMQP: <rabbit:connection-factory id="cachingConnectionFactory" username="${rabbitmq.connection.username}" password="${rabbitmq.connection.password}"
<rabbit:connection-factory id="cachingConnectionFactory"
username="${rabbitmq.connection.username}"
password="${rabbitmq.connection.password}"
host="${rabbitmq.connection.host}"
port="${rabbitmq.connection.port}"
executor="rabbitmqPoolTaskExecutor"
requested-heartbeat="${rabbitmq.connection.requested-heartbeat}"
channel-cache-size="${rabbitmq.connection.channel-cache-size}"
virtual-host="${rabbitmq.connection.virtual-host}" />
<rabbit:admin id="adminRabbit"
connection-factory="cachingConnectionFactory"
auto-startup="true" />
<rabbit:template id="rabbitTemplate"
connection-factory="cachingConnectionFactory"
exchange="v1.general.exchange"
message-converter="jsonMessageConverter"
encoding="${rabbitmq.template.encoding}"
channel-transacted="${rabbitmq.template.channel-transacted}" />
<rabbit:queue id="v1.queue.1" name="v1.queue.1" />
<rabbit:queue id="v1.queue.2" name="v1.queue.2" />
<rabbit:queue id="v1.queue.3" name="v1.queue.3" />
<fanout-exchange name="v1.general.exchange" xmlns="http://www.springframework.org/schema/rabbit" >
<bindings>
<binding queue="v1.queue.1" />
<binding queue="v1.queue.2" />
<binding queue="v1.queue.3" />
</bindings>
</fanout-exchange>
<listener-container xmlns="http://www.springframework.org/schema/rabbit"
connection-factory="cachingConnectionFactory"
message-converter="jsonMessageConverter"
task-executor="rabbitmqPoolTaskExecutor"
auto-startup="${rabbitmq.listener-container.auto-startup}"
concurrency="${rabbitmq.listener-container.concurrency}"
channel-transacted="${rabbitmq.listener-container.channel-transacted}"
prefetch="${rabbitmq.listener-container.prefetch}"
transaction-size="${rabbitmq.listener-container.transaction-size}" >
<listener id="v1.listener.queue.1" ref="listener1" method="handleMessage" queues="v1.queue.1" />
<listener id="v1.listener.queue.2" ref="listener2" method="handleMessage" queues="v1.queue.2" />
<listener id="v1.listener.queue.3" ref="listener3" method="handleMessage" queues="v1.queue.3" />
</listener-container>
<bean id="amqpServerConnection" class="com.sub1.sub2.RabbitGatewayConnectionImpl">
<property name="rabbitTemplate" ref="rabbitTemplate" />
</bean>
这些东西必须用AMPQ实现吗?基本上,客户端建立一个WebSocket会话,并使用STOMP进行消息传递(STOMP over WebSocket),而不是AMQP。在STOMP中,所有内容都由目标标头驱动,由消息代理定义其含义。例如,查看页面以了解Rabbit如何将STOMP目的地映射到队列和交换 因此,如果您认为RabbitMQ是您的消息代理,您已经在web应用程序端管理队列、交换等。消息传递协议是STOMP,那么客户端可以将消息发送到映射到
@MessageMapping
控制器方法的STOMP目的地或RabbitMQ支持的目的地。此外,控制器或任何其他注入了SimpMessagingTemplate
的组件可以向代理(Rabbit)发送消息,然后代理将向连接的web客户端广播
希望这有帮助
registry.enableStompBrokerRelay("/example1/", "/example2/")
.setApplicationLogin("guest")
.setApplicationPasscode("guest")
.setAutoStartup(true)
.setRelayHost("localhost")
.setRelayPort(5672)
.setSystemHeartbeatReceiveInterval(10000)
.setSystemHeartbeatSendInterval(10000);