布朗(Mark Richards),一位實(shí)踐經(jīng)驗(yàn)豐富的設(shè)計(jì)師,也是一位在消息傳遞、系統(tǒng)集成和面向服務(wù)的架構(gòu)方面有領(lǐng)導(dǎo)地位的專家和作家。Richard Monson-Haefel,O’Reilly 出版的《Enterprise JavaBeans》和《Java消息服務(wù)》第一版的合著者,是企業(yè)計(jì)算方面的世界級(jí)專家。David A. Chappell,Oracle公司副總裁兼SOA首席技術(shù)專家,是《Java Web Services》和《Java消息服務(wù)》第一版(均為O’Reilly出版)的合著者。
圖書目錄
Foreword Preface 1. Messaging Basics The Advantages of Messaging Heterogeneous Integration Reduce System Bottlenecks Increase Scalability Increase End User Productivity Architecture Flexibility and Agility Enterprise Messaging Centralized Architectures Decentralized Architectures Hybrid Architectures Centralized Architecture As a Model Messaging Models Point-to-Point Publish-and-Subscribe JMS API Point-to-Point API Publish-and-Subscribe API Real-World Scenarios Service-Oriented Architecture Event-Driven Architecture Heterogeneous Platform Integration Enterprise Application Integration Business-to-Business Geographic Dispersion Information Broadcasting Building Dynamic Systems RPC Versus Asynchronous Messaging Tightly Coupled RPC Enterprise Messaging 2. Developing a Simple Example The Chat Application Getting Started with the Chat Example Examining the Source Code Sessions and Threading 3. Anatomy of a JMS Message Headers Automatically Assigned Headers Developer-Assigned Headers Properties Application-Specific Properties JMS-Defined Properties Provider-Specific Properties Message Types Message TextMessage ObjectMessage BytesMessage StreamMessage MapMessage Read-Only Messages Client-Acknowledged Messages Interoperability and Portability of Messages 4. Point-to-Point Messaging Point-to-Point Overview When to Use Point-to-Point Messaging The QBorrower and QLender Application Configuring and Running the Application The QBorrower Class The QLender Class Message Correlation Dynamic Versus Administered Queues Load Balancing Using Multiple Receivers Examining a Queue 5. Publish-and-Subscribe Messaging Publish-and-Subscribe Overview When to Use Publish-and-Subscribe Messaging The TBorrower and TLender Application Configuring and Running the Application The TLender Class The TBorrower Class Durable Versus Nondurable Subscribers Dynamic Versus Administered Subscribers Unsubscribing Dynamic Durable Subscribers Temporary Topics 6. Message Filtering Message Selectors Identifiers Literals Comparison Operators Arithmetic Operators Declaring a Message Selector Message Selector Examples Managing Claims in an HMO Notification of Certain Bids on Inventory Priority Handling Stock Trade Order Auditing Not Delivered Semantics Design Considerations 7. Guaranteed Messaging and Transactions Guaranteed Messaging Message Autonomy Store-and-Forward Messaging Message Acknowledgments and Failure Conditions Message Acknowledgments AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE CLIENT_ACKNOWLEDGE Message Groups and Acknowledgment Handling Redelivery of Messages in an Application Message Groups Example Message Grouping and Multiple Receivers Transacted Messages Creating and Using a JMS Transaction Transacted Session Example Distributed Transactions Lost Connections The ExceptionListener Example Dead Message Queues 8. Java EE and Message-Driven Beans Java EE Overview Enterprise JavaBeans Enterprise JavaBeans 3.0 (EJB3) Overview Simplified Bean Development Dependency Injection Simplified Callback Methods Programmatic Defaults Interceptors Java Persistence API JMS Resources in Java EE The JNDI Environment Naming Context (ENC) Message-Driven Beans Concurrent Processing and Scalability Defining Message-Driven Beans Message-Driven Bean Use Cases Message Facade Transformation and Routing 9. Spring and JMS Spring Messaging Architecture JmsTemplate Overview Send Methods convertAndSend Methods receive and receiveSelected Methods receiveAndConvert Methods Connection Factories and JMS Destinations Using JNDI Using Native Classes Sending Messages Using the send Method Using the convertAndSend Method Using a Nondefault JMS Destination Receiving Messages Synchronously Message-Driven POJOs The Spring Message Listener Container MDP Option 1: Using the MessageListener Interface MDP Option 2: Using the SessionAwareMessageListener Interface MDP Option 3: Using the MessageListenerAdapter Message Conversion Limitations The Spring JMS Namespace [jms:listener-container] Element Properties [jms:listener] Element Properties 10. Deployment Considerations Performance, Scalability, and Reliability Determining Message Throughput Requirements Testing the Real-World Scenario To Multicast or Not to Multicast TCP/IP UDP IP Multicast Messaging Over IP Multicast The Bottom Line Security Authentication Authorization Secure Communication Firewalls and HTTP Tunneling Connecting to the Outside World Bridging to Other Messaging Systems 11. Messaging Design Considerations Internal Versus External Destination Internal Destination Topology External Destination Topology Request/Reply Messaging Design Messaging Design Anti-Patterns Single-Purpose Queue Message Priority Overuse Message Header Misuse A. The Java Message Service API B. Message Headers C. Message Properties D. Installing and Configuring ActiveMQ Index