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;
}
}



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