JMS-Dome

JMS:Java Message Service应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序

之间,或分布式系统中发消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS

提供支持。

启动:下载apache-mq后bin目录下对应系统(win32/win64)activemq.bat为启动项目,用户名:admin 密码:admin网页访问地址:http://localhost:8161/admin/   对应可以看到Queues/Topics等标签

配置:application.propertity

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

spring.activemq.pool.enabled=false

springBoot添加ActiveMQ支持:spring-boot-starter-activemq

优势:异步,可靠(JMS保证消息只会传递一次)

点对点消息模型,又称消费生产模型:每个消息只有一个接受者,消息发送者和消息接受者没有时间依赖性,当消息发送者

发送消息时,无论接收者在不在运行,都能获取到消息,当接收者收到消息的时候,会发送确认收到

通知(achnowledgement),多个消费者会轮流消费队列中的消息,ActiveMQQueue

//生产者
@Service
public class Producer {  
    @Resource
    private JmsMessagingTemplate jmsMessagingTemplate;  
    // 发送消息,destination是发送到的队列,message是待发送的消息  
    public void sendMessage(String destinationName, final String message){  
    System.out.println("***************>>>>>>>>>发送queue消息 " + message);
    Destination destination = new ActiveMQQueue(destinationName);
    jmsMessagingTemplate.convertAndSend(destination, message);  
    }

//消费者
@Service
public class Consumer {  
        // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息  
    @JmsListener(destination = "mytest.queue")
    public void receiveQueue(String text) {  
        System.out.println("Consumer收到的报文为:"+text);  
    }  
}


发布/订阅消息传送模型:发布者发布一个消息,通过topic传递给所有的客户端,一个消息可以传递给多个订阅者,发布者和订阅者有时间依赖性,只有当客户端创建订阅后才能接受消息,且订阅者需一直保持活动状态以接收消息。为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。ActiveMQTopic

@Service
public class Publisher {

@Resource
private JmsMessagingTemplate jmsMessagingTemplate;

public void publish(String destinationName,String message){
ActiveMQTopic destination = new ActiveMQTopic(destinationName);
System.out.println("***************>>>>>>>>>发布topic消息 " + message);
jmsMessagingTemplate.convertAndSend(destination, message);
}

}

@Service
public class Subscriber {


@JmsListener(destination = "mytest.topic", containerFactory = "jmsListenerContainerFactory")
public void subscribe(String text){
System.out.println("**********<<<<<<1收到的订阅消息为:"+text);
}

@Bean
JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章